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

Compare commits

...

280 Commits

Author SHA1 Message Date
sledgehammer999
c0ccf28d2c Bump to v3.2.5 2015-10-31 15:28:35 +02:00
sledgehammer999
9ff617a644 Update Changelog. 2015-10-31 15:24:25 +02:00
Vladimir Golovnev (Glassez)
0fbdc6471c Fix DownloadedPiecesBar::bitfieldToFloatVector(). 2015-10-29 23:30:19 +02:00
Vladimir Golovnev (Glassez)
1ecdcfc29c Fix PieceAvailabilityBar::intToFloatVector(). Closes #3937. 2015-10-29 23:30:13 +02:00
sledgehammer999
522ff3b611 Merge pull request #3920 from Gelmir/qt5fix
Fix Qt5 build
2015-10-11 16:26:52 -05:00
Nick Tiskov
edac24ecca Fix Qt5 build 2015-10-11 15:55:07 +03:00
sledgehammer999
6bbc26e613 Bump to v3.2.4 2015-10-10 14:59:56 +03:00
sledgehammer999
ca5f184c3d Update Changelog. 2015-10-09 17:55:50 +03:00
sledgehammer999
47078d31c1 Fix broken .desktop file icon for some locales. See #3905. 2015-10-09 17:54:57 +03:00
sledgehammer999
a42bca6098 Update Changelog. 2015-10-09 17:28:56 +03:00
sledgehammer999
ade4c44aad New translation: Esperanto
Also re-run lupdate.
2015-10-09 17:18:27 +03:00
sledgehammer999
fdbf8e8b6e Sync translations from Transifex and run lupdate. 2015-10-09 17:06:14 +03:00
sledgehammer999
a9f14a8408 Fix Qt5 nox build on non-Windows. 2015-10-09 16:54:43 +03:00
sledgehammer999
73e5bdc5b5 Bump WebUI API_VERSION. 2015-10-09 16:50:33 +03:00
sledgehammer999
c18a56769d Optimize text color for dark themes v2. Closes #3815. 2015-10-09 02:09:28 +03:00
sledgehammer999
291d006740 Fix Konqueror detection in Plasma (KDE5)
(manual backport from master)
2015-10-08 00:53:21 +03:00
Chocobo1
3693b34c2c Fix potential crash when memory allocation failed. Closes #3877. 2015-10-05 19:56:57 +03:00
sledgehammer999
ad5dd8391a Add forum link in README. Closes #3853. 2015-10-04 22:36:22 +03:00
sledgehammer999
e77e90e8d2 Fix broken donation link. Closes #3771. 2015-10-04 22:36:11 +03:00
sledgehammer999
e828b3a398 Fix python detection when the 'Anaconda' software is installed. Closes #3731. 2015-10-04 12:14:36 +03:00
netswap
f31bdc1fc4 Added letters
The letter "p" was missing in "Dateiverknüpfung" in line 47 & 49
2015-10-04 11:40:25 +03:00
sledgehammer999
81912736ed Merge pull request #3230 from Chocobo1/rss_sort_v320
Sort labels in RSS Downloader dialog
2015-10-04 03:18:22 -05:00
Chocobo1
176dd0bee8 Sort labels in RSS Downloader dialog, closes #3140. 2015-10-04 15:12:01 +08:00
ngosang
bbcfa5aae7 Fix RSS crash when deleting RSS feeds. Closes #997, #2152, #2461, #3718, #3747, #3766, #3806, #3814, #3829 and #3846. 2015-09-24 01:08:28 +03:00
ngosang
2990492506 [RSS] Removes refresh message when adding a new feed 2015-09-18 02:13:02 +03:00
Casey Bodley
9d7c7c51ca webui: add save_path to /query/torrents
Signed-off-by: Casey Bodley <cbodley@gmail.com>
2015-09-18 01:52:45 +03:00
sledgehammer999
2dd65b9eb9 Partial backport of cf3a87ed55. 2015-09-18 01:38:11 +03:00
Nick Tiskov
c8b74215c0 Fix: Adding RSS rule with a new label doesn't add this label to UI. 2015-09-18 01:07:59 +03:00
Nick Tiskov
87092e2716 Fix: Label changes to first item in RSS rule list are forgotten, because checkRegex calls updateMustLineValidity, which saves the rule before new label can be applied. 2015-09-18 01:07:48 +03:00
sledgehammer999
bf3cbfc608 Don't limit the number of torrents that can be announced to the tracker/dht/lsd. Closes #3473. 2015-09-16 22:02:13 +03:00
sledgehammer999
ddde91dbb9 Merge pull request #3798 from jsayol/patch-2
Backporting #3765 to v3_2_x branch
2015-09-16 03:36:35 -05:00
jsayol
93173fadeb Backporting #3765 to v3_2_x branch 2015-09-16 07:26:27 +07:00
sledgehammer999
4eb6e74dd6 Show current label in the torrent context menu. Closes #3776. 2015-09-16 02:49:50 +03:00
sledgehammer999
3f9e528633 Optimize text color for dark themes. Closes #3633. 2015-09-15 23:30:42 +03:00
sledgehammer999
0501971e82 Sync translations from Transifex and run lupdate. 2015-09-15 23:19:01 +03:00
sledgehammer999
6b4aad8a83 Try to avoid loading a corrupted configuration file. Also log errors encountered while saving/loading the configuration. Closes #3503. 2015-09-14 02:36:36 +03:00
sledgehammer999
80de35c5ee Sync translations from Transifex and run lupdate. 2015-09-04 23:28:24 +03:00
sledgehammer999
a7528ec27a Fix typos. Make ìTP untranslatable. Use American variation of words. Closes #3654. 2015-09-04 23:11:10 +03:00
ngosang
ab49c80247 Fix RSS panel position not saved 2015-09-04 21:55:04 +03:00
ngosang
0ec35a24e0 [RSS] Handle more types of RSS feeds 2015-09-03 01:32:18 +03:00
ngosang
600aa61095 [RSS] Simplify string translation 2015-09-03 01:32:09 +03:00
ngosang
5db783cb7f [RSS] Allow multiple selection in RSS torrents list 2015-09-03 01:32:00 +03:00
ngosang
1a653829b8 [RSS] Don't hide the elements in Unread list when clicked 2015-09-03 01:31:47 +03:00
ngosang
7d1e2944ab [RSS] More precise message and code simplification in RSS feeds deletion 2015-09-03 01:31:36 +03:00
ngosang
7cecad4e82 [RSS] Improve error handling when a RSS feed doesn't contain torrents 2015-09-03 01:31:27 +03:00
ngosang
6dc82df368 [RSS] Fix contextual menu in RSS torrents list 2015-09-03 01:26:00 +03:00
ngosang
fcb22eb568 [RSS] Trim elements text in RSS articles 2015-09-03 01:25:45 +03:00
ngosang
82866605b4 [RSS] Handle magnet links as torrents instead of news URLs. Closes #3560 2015-09-03 01:25:35 +03:00
sledgehammer999
a78cd3d2ac Try to download favicon.png when the download of favicon.ico fails
Manual backport of 3889b4c101
2015-09-03 01:23:00 +03:00
Gabriele
2e08b365a2 configure: don't depend on GNU sed
Closes #3169.
2015-08-30 21:57:13 +03:00
sledgehammer999
9eca9585a0 Merge pull request #3277 from Chocobo1/path
Fix wrong default download directory in Windows
2015-08-30 12:36:00 -05:00
Chocobo1
e29a714da4 Move option "Confirm torrent deletion" to Behavior page 2015-08-30 20:19:49 +03:00
Chocobo1
e3f6cea95c Follow project coding style. Issue #2192. 2015-08-30 20:19:37 +03:00
sledgehammer999
ddbdeb1f89 Merge pull request #3715 from Chocobo1/moveOpt_v32x
Move option "Ignore transfer limits on local network" to Speed page
2015-08-30 11:16:38 -05:00
Chocobo1
9471d17a65 Fix wrong default download directory in Windows. Closes #2625. 2015-08-31 00:03:33 +08:00
Chocobo1
5e457353e5 Move option "Ignore transfer limits on local network" to Speed page 2015-08-31 00:00:18 +08:00
ngosang
81089945ae Change Queue buttons order in the Toolbar (GUI & Web UI) 2015-08-30 15:20:56 +03:00
Fabio Alessandro Locati
b305b8d8c5 Fix minimum libtorrent-rasterbar version
as title
2015-08-30 15:20:40 +03:00
sledgehammer999
a8603d66dc Update ax_boost_base.m4 to fix ppc64le detection. 2015-08-30 04:51:28 +03:00
sledgehammer999
fda3704a03 Fix dolphin detection for KDE5. 2015-08-30 04:44:38 +03:00
sledgehammer999
6258dee96b Fix a bug with highlighting selected file on Windows. Closes #3185. 2015-08-30 04:44:32 +03:00
sledgehammer999
6334144f81 Merge pull request #3705 from pmzqla/select-destination-3_2_x
Select the file of single file torrents when opening destination folder
2015-08-29 20:31:24 -05:00
Gabriele
4696fbff4a Select the file of single file torrents when opening destination folder
Also, add the support for Nautilus (Gnome 3), Caja and Nemo.

Backport of #2544.
2015-08-29 20:58:39 +02:00
sledgehammer999
8679b70b4c Backport fix for crash when invalid favicon is downloaded. Closes #3632. 2015-08-26 20:38:27 +03:00
sledgehammer999
56beb0ddce Write BOM to german.nsi. Closes #3574, #3566 2015-08-05 23:26:26 +03:00
sledgehammer999
8bf23e8087 Bump to v3.2.3 2015-08-02 16:18:04 +03:00
sledgehammer999
6bdfe77c80 Update Changelog. 2015-08-02 16:14:54 +03:00
Gabriele
15c785d298 searchengine: remove size constraints to search button 2015-08-02 15:29:57 +03:00
Gabriele
577582ee0b searchengine: use kill() instead of terminate() on Windows 2015-08-02 15:29:48 +03:00
Gabriele
60ab8f87e9 searchengine: use a single string for the search results number label 2015-08-02 15:29:35 +03:00
Gabriele
4420ae1996 searchengine: don't use strings to determine the status of search processes
'&' symbols are dynamically added to strings, making comparisons
unreliable.
2015-08-02 15:29:03 +03:00
Gabriele
778046439c searchengine: drop unused flag and related code 2015-08-02 15:28:53 +03:00
Gabriele
be47c35cba searchengine: fix crash when closing tab with running search
If a tab is closed, the search process gets terminated. This can take
a while and by the time searchFinished() is executed, activeSearchTab
is null, leading to a crash. Fix this by waiting for the process to
terminate and make sure activeSearchTab is not null when used.
2015-08-02 15:28:37 +03:00
Gabriele
a51a855870 Follow project coding style. Issue #2192. 2015-08-02 15:27:16 +03:00
sledgehammer999
6fc3c04dca Bump to v3.2.2 2015-08-01 20:18:10 +03:00
sledgehammer999
ae150b25ae Update Changelog. 2015-08-01 20:09:10 +03:00
sledgehammer999
36ddf0fd2f Use correct status icon for Travis CI. Closes #3534. 2015-08-01 20:09:04 +03:00
sledgehammer999
06d59cab2d Fix previous commit. Use correct locale name. 2015-08-01 20:08:26 +03:00
sledgehammer999
8f519d00e7 New translation: Slovenian
Also re-run lupdate.
2015-08-01 19:33:55 +03:00
sledgehammer999
ce58a3fd4b Sync translations from Transifex and run lupdate. 2015-08-01 19:13:30 +03:00
sledgehammer999
303dbd7dbe Bump minimum libtorrent version required to 1.0.6/0.16.19. 2015-08-01 18:53:57 +03:00
Vladimir Golovnev (Glassez)
c9abcbfbd4 Fix HTTP header parsing. Closes #3511. 2015-08-01 18:45:27 +03:00
sledgehammer999
baab8ddf75 Remove obsolete Boost configurations. 2015-08-01 18:45:08 +03:00
Chocobo1
982d4a685a Fix warnings by qmake -Wall, cleanups 2015-08-01 18:44:55 +03:00
Chocobo1
52ff7a92fb Add path to openssl, cleanups 2015-08-01 18:44:41 +03:00
Chocobo1
8a4a3b33f8 Update .gitignore 2015-08-01 18:44:23 +03:00
Chocobo1
aec4f1d343 Fix '&' character in label name becomes accelerator key, closes #3454. 2015-08-01 18:44:02 +03:00
ngosang
32ea862584 [Web UI] Fix friendlyUnit() implementation. Related to #2719 2015-08-01 18:42:06 +03:00
ngosang
9f1bd86c47 Improve Python detection 2015-08-01 18:35:49 +03:00
sledgehammer999
d2853b3a98 [webui] Fix ugly 'C++' wrapping in About dialog. 2015-08-01 18:29:20 +03:00
Gabriele
64cf3afe67 Add count of unread items to RSS tab label
Closes #2681.
2015-08-01 18:21:42 +03:00
sledgehammer999
7729035598 Merge pull request #3522 from Chocobo1/travis_v320
Migrate TravisCI to container-based infrastructure
2015-07-30 19:32:06 +03:00
Chocobo1
021cf9fb65 Migrate TravisCI to container-based infrastructure 2015-07-30 23:28:41 +08:00
sledgehammer999
c2e9ce5966 Sync translations from Transifex and run lupdate. 2015-07-25 03:22:01 +03:00
ngosang
75e4a004f7 [Web UI] Massive increase in performance. 2015-07-25 03:17:02 +03:00
sledgehammer999
ac60072ded Fix installing search plugin by drag-n-dropping file. 2015-07-22 23:24:35 +03:00
sledgehammer999
9cac51d9b0 Fix installing search plugin from local file. 2015-07-22 23:24:28 +03:00
sledgehammer999
14d590b3be Fix segfault on Linux due to early initialization of global var.
misc::pythonVersion() gets called before the Logger is initialized.

Conflicts:
	src/searchengine/engineselectdlg.cpp
2015-07-22 23:24:21 +03:00
sledgehammer999
86d1dc300c Improve checks for python. Print python version and path to log.
Conflicts:
	src/core/misc.cpp
	src/core/utils/misc.h
	src/gui/mainwindow.cpp
2015-07-22 23:24:13 +03:00
ngosang
6787623ff3 [search engine] Fix cpu_count in old Python versions 2015-07-21 22:03:10 +03:00
sledgehammer999
636ff89e23 Fixup previous commits on python search. 2015-07-21 22:02:52 +03:00
sledgehammer999
568950e63e Don't use list of versions for the Python fallback detection on Windows
Always pick the newest versions among those installed.
2015-07-21 22:02:36 +03:00
sledgehammer999
b3b973d54b Don't specify the Python version required in the notification
Both python2 and python3 are supported.
2015-07-21 22:01:29 +03:00
sledgehammer999
ff64a79594 Update link to the Windows Python installer
From v2.7.3 to v3.4.3.

Conflicts:
	src/gui/mainwindow.cpp
2015-07-21 22:00:27 +03:00
sledgehammer999
26b635ca33 Show notification if Python is not found and a search is started
Also, don't bother starting a search if it's known that Python is
not available.
2015-07-21 21:57:38 +03:00
Gabriele
7e63908977 Use python3 and python2 instead of python on Linux
Prefer python3 over python2 when both are available.

Both python2 and python3 should always exists.
More info at: http://legacy.python.org/dev/peps/pep-0394/

Conflicts:
	src/core/utils/misc.h
	src/searchengine/supportedengines.h
2015-07-21 21:54:18 +03:00
sledgehammer999
5c9ce2952b Static order of items in the transferlist menu.
Conflicts:
	src/gui/transferlistwidget.cpp
2015-07-21 21:39:24 +03:00
ngosang
6ca7ff0e25 [Web UI] Changes in Force Resume icon and menu order 2015-07-21 21:27:43 +03:00
ngosang
3091c30ff6 Changes in Force Resume icon and menu order
Conflicts:
	src/gui/transferlistwidget.cpp
2015-07-21 21:27:16 +03:00
ngosang
1086b940a2 Minor changes in Preview File dialog 2015-07-21 21:17:39 +03:00
sledgehammer999
9465f358c4 Fix compiler warning for unused variable. 2015-07-21 21:17:24 +03:00
Chocobo1
f8cb9d09f6 Fix localhost address (::ffff:127.0.0.1) is not recognized when connecting to WebUI 2015-07-21 21:17:13 +03:00
sledgehammer999
01d8b24982 Update Changelog. 2015-07-19 19:27:54 +03:00
ngosang
b7604b1c82 [Web UI] Open external links in a new window/tab 2015-07-19 19:01:27 +03:00
ngosang
4da4457f5f [Web UI] Fix sort by queue number 2015-07-19 19:01:13 +03:00
sledgehammer999
858909bf19 Fix previous commit on DHT announce. 2015-07-19 18:40:36 +03:00
sledgehammer999
d3bdb52b8f Merge pull request #3462 from Chocobo1/announce_v320
DHT announce
2015-07-19 18:22:11 +03:00
sledgehammer999
d804445de7 Merge pull request #3459 from ngosang/webui_trackmenu320
[Web UI] Torrent download from hash. Closes #1173
2015-07-19 16:25:00 +03:00
sledgehammer999
5187899d7e Merge pull request #3460 from ngosang/webui_addtrackers32x
[Web UI] Fix empty trackers addition
2015-07-19 16:24:31 +03:00
Chocobo1
67ad8ef7d6 Change DHT announce actions, see #3431. 2015-07-19 21:17:09 +08:00
sledgehammer999
cbd9ccef17 Switch to libtorrent git repository
Fix missing variable when compiling for coverity scan
2015-07-19 16:16:05 +03:00
sledgehammer999
d6420e6876 Update settings for Coverity Scan. 2015-07-19 16:15:13 +03:00
Chocobo1
f76b1eb2fb Hookup to Coverity Scan, Closes #2601 2015-07-19 16:15:02 +03:00
Gabriele
e474f53910 Allow to copy all the trackers with a keyboard shortcut
If multiple trackers are selected, Ctrl+C will copy only one of them
while the context menu will copy all of them. Fix this inconsistency.

Closes #2675.
2015-07-19 16:09:02 +03:00
ngosang
ccac6cb5a9 [search engine] Remove the word 'torrent' in ExtraTorrent results 2015-07-19 16:08:53 +03:00
DoumanAsh
92bb94ecca Search status uses tab's status 2015-07-19 16:08:44 +03:00
DoumanAsh
b286351305 Replace indent to 4 spaces 2015-07-19 16:08:35 +03:00
sledgehammer999
3873a36338 Fix printing of the copyright symbol in the About dialog. 2015-07-19 16:08:26 +03:00
Oleh Prypin
f989708e31 Implement an option to disable confirmation of torrent recheck
Conflicts:
	src/gui/transferlistwidget.cpp
2015-07-19 16:08:17 +03:00
sledgehammer999
2dbeda5985 Update color scheme of completed.png icon. 2015-07-19 16:08:08 +03:00
ngosang
9d5d1dfea8 [Web UI] Fix API Content Types. Closes #3393
Conflicts:
	src/core/http/types.h
	src/webui/webapplication.cpp
2015-07-19 16:07:59 +03:00
ngosang
3738302a3c Increase API_VERSION
Conflicts:
	src/webui/webapplication.cpp
2015-07-19 16:07:50 +03:00
ngosang
7f58ff4c8f [Web UI] New option Web UI port UPNP. Closes #3358 2015-07-19 16:07:42 +03:00
ngosang
4c079ede83 [Web UI] Fix an error in Content tab when the torrent doesn't have metadata
Conflicts:
	src/webui/btjson.cpp
2015-07-19 16:07:33 +03:00
ngosang
1ee91ddb13 [Web UI] Fix empty trackers addition 2015-07-19 14:26:31 +02:00
ngosang
03fd0a36a6 [Web UI] Torrent download from hash. Closes #1173 2015-07-19 14:04:48 +02:00
ngosang
266c96f03b [Web UI] Ports between 1 and 65535 as in the GUI. Closes #1602 2015-07-19 14:36:54 +03:00
sledgehammer999
a088657619 Merge pull request #3403 from ngosang/32x_fixrename
Fix torrent renaming. Closes #3398
2015-07-12 12:37:02 +03:00
ngosang
7c164dfcb9 Fix torrent renaming. Closes #3398 2015-07-12 09:38:25 +02:00
sledgehammer999
20f4b95180 Bump to v3.2.1 2015-07-11 17:37:47 +03:00
sledgehammer999
8ac4cccc25 Update Changelog. 2015-07-11 17:31:39 +03:00
sledgehammer999
d990af4a79 Sync translations from Transifex and run lupdate. 2015-07-11 17:26:32 +03:00
sledgehammer999
8e73c262f9 Merge pull request #3378 from ngosang/webuialter320
[Web UI] Fix alternative global rate limits. Closes #3359
2015-07-09 01:38:23 +03:00
ngosang
7804faa34d [Web UI] Additional checks in Options dialog 2015-07-09 00:18:47 +02:00
ngosang
0bb0a5ea13 [Web UI] Reorder Options dialog code 2015-07-09 00:07:56 +02:00
ngosang
d5b9e3449b [Web UI] Fix alternative global rate limits. 2015-07-08 23:51:42 +02:00
sledgehammer999
753b33b8a3 Update Changelog. 2015-07-08 19:09:59 +03:00
ngosang
eb12d63d2d [search engine] Fix Python 2 implementation of Torrentz 2015-07-08 18:29:44 +03:00
sledgehammer999
b21ab50221 Merge pull request #3350 from ngosang/torrent_creator320
Add 16 KiB, 8 MiB and 16 MiB piece sizes in Torrent Creator
2015-07-04 03:22:51 +03:00
ngosang
34f89d3174 Add 16 KiB, 8 MiB and 16 MiB piece sizes in Torrent Creator 2015-07-04 01:53:19 +02:00
sledgehammer999
54227c20ff Sync translations from Transifex and run lupdate. 2015-07-04 02:02:07 +03:00
sledgehammer999
515c578188 Add unicodestrings.h to core.pri
Conflicts:
	src/core/core.pri
2015-07-04 01:55:43 +03:00
sledgehammer999
74bba9ecfe Partially revert fec6c8af2 and split the Chinese locales into 3.
Chinese Simplified, Chinese Traditional(Taiwan), Chinese Traditional(Hong Kong).
Closes #3262.
2015-07-04 01:55:34 +03:00
sledgehammer999
41e052498b Fix Properties bar size when started minimized to tray. Closes #3206. 2015-07-04 01:55:24 +03:00
ngosang
3a51c5bf85 Fix column sort in search engine. Closes #2621 2015-07-04 01:55:15 +03:00
ngosang
cad542f3f4 [Web UI] Don't update the tabs if tab's panel is collapsed 2015-07-04 01:55:06 +03:00
ngosang
54a444d37f [Web UI] Add Web Seeds (HTTP Sources) tab 2015-07-04 01:54:57 +03:00
sledgehammer999
1c5e6980e8 Don't use a default upload limit. Closes #3275. 2015-07-04 01:20:59 +03:00
Chocobo1
8b7d995447 Mention github contributors in thanks.html 2015-07-04 01:19:58 +03:00
Chocobo1
0b83ea9fcf Move translators & thanks to its own file
Add HTML header & cleanup
2015-07-04 01:19:39 +03:00
Chocobo1
04e582793e Fix compilation on MSVC2013 by moving unicode strings to
"unicodestrings.h". Closes #3059.

Conflicts:
	src/core/misc.cpp
	src/gui/addnewtorrentdialog.cpp
	src/gui/options_imp.cpp
	src/gui/properties/propertieswidget.cpp
	src/gui/transferlistdelegate.cpp
2015-07-04 01:19:10 +03:00
ngosang
07e2e88e79 Cosmetics changes in search engine
Conflicts:
	src/searchengine/engineselectdlg.cpp
2015-07-04 01:02:51 +03:00
Chocobo1
e120a6764b Better message for users 2015-07-04 00:58:36 +03:00
Chocobo1
c4a311cc09 Capitalize menu item, missed in 98a4b8c. 2015-07-04 00:57:31 +03:00
ngosang
278872eb12 Increase API_VERSION due to changes in #3279, #3197, #3226 and #3040
Conflicts:
	src/webui/webapplication.cpp
2015-07-04 00:53:14 +03:00
ngosang
c3d9321865 [Web UI] Add new options
Conflicts:
	src/webui/prefjson.cpp
2015-07-04 00:50:24 +03:00
sledgehammer999
882f5e325a Follow project coding style. Issue #2192. - prefjson.cpp 2015-07-04 00:45:42 +03:00
ngosang
bf7bec61c2 [search engine] Update TorrentReactor 2015-07-04 00:42:07 +03:00
ngosang
72af954b65 [search engine] Update ExtraTorrent 2015-07-04 00:41:09 +03:00
Chocobo1
514abca0ea Add connectionsLimit() back
Conflicts:
	src/gui/properties/propertieswidget.cpp
2015-07-04 00:40:47 +03:00
Chocobo1
643224800f Preserve plain text formatting 2015-07-04 00:29:35 +03:00
Chocobo1
8e25ec7dbf Force set "plain text" format to reduce attack vector. 2015-07-04 00:29:20 +03:00
Chocobo1
07b36f313b Allow wordWrap for "Save Path" & "Comment" 2015-07-04 00:29:01 +03:00
Chocobo1
34d2bdadc0 Change Comment field from QTextBrowser to QLabel
Conflicts:
	src/gui/properties/propertieswidget.cpp
2015-07-04 00:28:40 +03:00
Chocobo1
92ef98080b Reorder layout in information box 2015-07-04 00:25:52 +03:00
ngosang
34bf09b539 [search engine] Update Torrentz 2015-07-04 00:21:31 +03:00
ngosang
06f46eae24 [search engine] Update BTDigg 2015-07-04 00:20:36 +03:00
ngosang
ae5b2fa4a4 [search engine] Update KickassTorrents 2015-07-04 00:20:09 +03:00
ngosang
9b7c2e669e [search engine] Fix novaprinter.py version number 2015-07-04 00:19:51 +03:00
Vladimir Golovnev (Glassez)
e6e087d391 Fix ugly 'C++' wrapping in About dialog. 2015-07-04 00:19:10 +03:00
sledgehammer999
bf6b723206 Merge pull request #3103 from heirecka/v3_2_x
Add missing QDataStream include
2015-06-30 22:01:49 +03:00
Chocobo1
0bce0fc6c1 Update disk space label after changing partition, closes #3309.
Conflicts:
	src/gui/addnewtorrentdialog.cpp
2015-06-28 15:23:51 +03:00
sledgehammer999
4d913d123c Partially revert 75979cc4d5.
Fixes Linux issue for when the theme doesn't have a corresponding icon.
2015-06-21 01:00:03 +03:00
sledgehammer999
a00bbf349a Minimize to tray only if the relevant option is enabled. 2015-06-20 23:35:11 +03:00
sledgehammer999
c61566d133 Merge pull request #2791 from pmzqla/file-priority
Increase priority value of "High"
2015-06-20 21:13:03 +03:00
ngosang
a675a13587 [Web UI] Tabs indentation replaced with spaces 2015-06-20 19:33:43 +03:00
ngosang
ebe0e7bb71 [Web UI] Reorder the tabs/groups in Options window 2015-06-20 19:33:31 +03:00
ngosang
e30df4ed70 [Web UI] Option to hide Top Toolbar 2015-06-20 19:33:19 +03:00
ngosang
9dcb9848ae [Web UI] Changes in menus to keep the client's style 2015-06-20 19:33:06 +03:00
Chocobo1
7034d14eba Use warning message box instead of critical 2015-06-20 18:59:08 +03:00
Chocobo1
08c8b6f77d Don't close downloadFromURL dialog when showing empty url warning 2015-06-20 18:59:02 +03:00
Mayank Asthana
be91f749ee Download-from-URL textbox changes focus on tab key 2015-06-20 18:45:00 +03:00
sledgehammer999
4ec2a37f5d Delete tempfile when downloading favicon.ico. Closes #3257. 2015-06-20 18:17:13 +03:00
ngosang
cc471dbd3c [Web UI] Remove DHT port setting. Closes #3225 2015-06-20 18:16:42 +03:00
sledgehammer999
ab62cbdf3f Merge pull request #3213 from Chocobo1/props_widget_v320
Revamp general tab info
2015-06-20 16:56:00 +03:00
Chocobo1
cd708bb665 Add functionality to new data fields, cleanups 2015-06-20 20:39:19 +08:00
sledgehammer999
c1a47279af Merge pull request #3229 from Chocobo1/dev6_v320
Fix potential out-of-bound access in misc::friendlyUnit()
2015-06-20 02:49:10 +03:00
sledgehammer999
fec6c8af27 Rename Chinese translation files. Closes #2936. 2015-06-17 23:08:14 +03:00
Chocobo1
fc605b119e Webui: add delay in shutdown command in order to send out response msg 2015-06-17 23:08:09 +03:00
Chocobo1
7892f37d3e Fix potential out-of-bound access of units[i] 2015-06-17 08:10:25 +08:00
Chocobo1
26cb71458d Simplify code 2015-06-17 08:09:47 +08:00
sledgehammer999
069bd05d37 Clear missing files flag when resuming or force rechecking. Fixes issues in #2750. 2015-06-15 00:53:34 +03:00
sledgehammer999
c4f043a14d New translation: Indonesian. 2015-06-14 23:51:14 +03:00
sledgehammer999
16b9a28531 Sync translations from Transifex and run lupdate. 2015-06-14 23:47:45 +03:00
sledgehammer999
1da29a450c Merge pull request #3212 from Chocobo1/opt_ip_filter_tracker_v32x
Add checkbox option for IpFilterTrackers.
2015-06-14 20:23:14 +03:00
sledgehammer999
9095545425 Merge pull request #3214 from Chocobo1/move_stats_v320
Revamp menu items
2015-06-14 20:22:19 +03:00
Chocobo1
01dbc01635 Improve ratio calculation formula. Closes #3096. 2015-06-14 20:12:19 +03:00
Chocobo1
bd7fd47d9f Resave in Qt Designer 2015-06-14 20:09:39 +08:00
Chocobo1
429dad3f70 Remove menu items: "Visit Website" and "Report a Bug".
Many issues opened on github should be asked on forum first, and the links are already present in "About" window.
2015-06-14 20:08:47 +08:00
Chocobo1
ca70f2ce5c Rename "Execution Log" to "Log".
Rename "When Downloads Done" to "On Downloads Done".
2015-06-14 20:08:05 +08:00
Chocobo1
98a4b8c199 Move statistics from Tools to View
Reorder & add separators in Help menu
Rename `Auto-Shutdown on downloads completion` to `When downloads done`
Capitalize menu items, modify accelerator
2015-06-14 20:07:58 +08:00
Chocobo1
6dd94ccc1d Add new data fields, capitialize labels, cleanups 2015-06-14 19:34:46 +08:00
Chocobo1
e83a8393a4 Add a parameter to QString(time_t t) 2015-06-14 19:33:54 +08:00
Chocobo1
8fa79a0690 Add checkbox option for IpFilterTrackers. 2015-06-14 19:05:26 +08:00
sledgehammer999
0423a28f30 Add translator to credits. 2015-06-14 12:29:30 +03:00
sledgehammer999
18f32fae90 Merge pull request #3182 from ngosang/typo_revision_32x
Changes in typography (v3_2_x)
2015-06-13 22:07:22 +03:00
sledgehammer999
057b998e0f Merge pull request #2966 from pmzqla/sort-eta
Fix sorting torrents by ETA
2015-06-13 22:01:24 +03:00
sledgehammer999
855ac43aca Merge pull request #3184 from ngosang/AnnounceToAllTrackers_32x
Change default preferences (v3_2_x)
2015-06-13 21:40:37 +03:00
ngosang
5a6302af59 changes in typography 2015-06-13 20:17:37 +02:00
sledgehammer999
174861274b Merge pull request #2958 from Chocobo1/neg_loop
Fix potential negative loop bound
2015-06-13 21:01:00 +03:00
sledgehammer999
718983a4d6 Merge pull request #3180 from ngosang/cppcheck_fixes_32x
Cppcheck: scope reduction & unused variables (v3_2_x)
2015-06-13 20:19:40 +03:00
sledgehammer999
a77e550bf9 Merge pull request #3202 from DoumanAsh/py3_remove_cache_3_2_x
3_2_x mapping: [search engine] Remove python3 cache during updateNova()
2015-06-13 09:26:49 +03:00
DoumanAsh
aac6a4526c 3_2_x mapping: [search engine] Remove python3 cache during updateNova() 2015-06-13 08:46:52 +03:00
who-me
23842a8ec3 Update qBittorrent.appdata.xml
Usage of the <updatecontact/> breaks validation. The correct tag is <update_contact/> as per info on this page:
http://www.freedesktop.org/software/appstream/docs/chap-Metadata.html#tag-update_contact
2015-06-13 02:28:49 +03:00
DoumanAsh
422db313de [search engine] Update Legit Torrent to remove sgmllib 2015-06-13 02:28:49 +03:00
sledgehammer999
07bbe70baf Merge pull request #3181 from ngosang/user-agent_32x
Changes in User-Agent (v3_2_x)
2015-06-13 02:26:10 +03:00
sledgehammer999
f46eafc9fd Merge pull request #3178 from ngosang/search_version_32x
[Search engine] Show the version of search engines (v3_2_x)
2015-06-13 02:23:53 +03:00
sledgehammer999
86df2520ad Fix python detection from reigstry when multiple versions are installed. Update fallback mechanism for newer versions. 2015-06-13 02:19:12 +03:00
Gabriele
640e0ea34d Update matching RSS articles while editing rules
Save the rules as soon as they are edited so that the matching
articles tree is immediately updated.

Closes #2829.
2015-06-13 02:19:12 +03:00
ngosang
cd03c511a5 Minor fixes in search engines 2015-06-13 02:19:11 +03:00
ngosang
98533ede13 [search engine] Add Demonoid search engine 2015-06-13 02:19:11 +03:00
DoumanAsh
09dedd0f22 [search engine] Final enhancements. 2015-06-13 02:19:10 +03:00
DoumanAsh
639f5b2d20 [search engine] Cosmetic update TorrentReactor 2015-06-13 02:19:09 +03:00
DoumanAsh
e758f4ec26 [search engine] re-factoring of code 2015-06-13 02:19:09 +03:00
DoumanAsh
aae1a3564d [search engine] engines update 2015-06-13 02:19:08 +03:00
DoumanAsh
68e29df2ae [search engine] Nova2 multiprocessing 2015-06-13 02:19:08 +03:00
DoumanAsh
183643d77b Exception free retrieve_url()
Set 2 second timeout and handle any possible connection error
Return empty string to engine in case of connection exception
2015-06-13 02:19:07 +03:00
DoumanAsh
d8838363b8 Aborting search engine process during closure. Close #2671 2015-06-13 02:19:07 +03:00
Chocobo1
a0877fd57c Use AllUppercase for label text 2015-06-13 02:19:07 +03:00
Gabriele
271b37885f Allow to Open files from the properties pane by pressing "Enter"
Allow to open only one file at a time and ignore keypresses when
multiple items are selected.
2015-06-13 02:18:08 +03:00
Chocobo1
00b32a0996 Add "Add link to torrent" menu in TrayIconMenu. Closes #2918. 2015-06-13 02:18:07 +03:00
Chocobo1
75979cc4d5 Enable to choose dark/light tray icons on all platforms. 2015-06-13 02:18:07 +03:00
LazyBui
cf41f41b16 Making alternate download/upload configuration behave like global download/upload configuration so as to allow boundless down/up 2015-06-13 02:18:06 +03:00
ngosang
12ad2c7368 Fix Start Minimized checkbox in Options 2015-06-13 02:18:06 +03:00
Chocobo1
86b21dacfd Set default focus to no button in exit confirm box 2015-06-13 02:18:06 +03:00
Chocobo1
7ce343c28f Set default focus to ok button in add new torrent dlg 2015-06-13 02:18:05 +03:00
Chocobo1
fc3e85f449 Set default focus to cancel button in delete confirm dlg, closes #3085 2015-06-13 02:18:05 +03:00
Chocobo1
fb32408ba1 Change option text "Confirmation on exit when torrents are active" 2015-06-13 02:18:04 +03:00
ngosang
32eec624a1 Make strings translatable in seach engine 2015-06-13 02:18:04 +03:00
ngosang
8122ae4739 Disable Auto piece size when creating a new torrent 2015-06-13 02:18:03 +03:00
ngosang
49cce9b2fc Change width of columns in search tab. Closes #764 2015-06-13 02:18:03 +03:00
ngosang
bded737c3c Web UI: Display wasted data with friendly units. Closes #2994 2015-06-13 02:18:02 +03:00
ngosang
a94b317150 Web UI: New config - Global maximum number of upload slots 2015-06-13 02:18:02 +03:00
ngosang
6d34f86c51 Web UI: Fix Max connections and Time active in transfer information 2015-06-13 02:18:01 +03:00
ngosang
6dfd962a13 Web UI: Minor changes in style 2015-06-13 02:18:01 +03:00
ngosang
89cfd41c5f Web UI: Complete translatable strings 2015-06-13 02:18:00 +03:00
ngosang
9fbd19b2ca Web UI: Changes in title bar 2015-06-13 02:18:00 +03:00
ngosang
1577a366e0 [search engine] Improve torrentz engine to return more results 2015-06-13 02:17:59 +03:00
ngosang
19506ea323 [search engine] Fix thepiratebay. Closes #3012 2015-06-13 02:17:59 +03:00
ngosang
b0d321d729 Web UI: Fix resumeAll and pauseAll. Closes #3016 2015-06-13 02:17:59 +03:00
ngosang
a63648b769 Web UI: Fix login and logout relative URLs 2015-06-13 02:16:06 +03:00
Chocobo1
cfe5f8e518 Fix wrong path for icons.qrc 2015-06-13 02:15:54 +03:00
ngosang
56f842dd6d Change default preferences 2015-06-12 01:58:51 +02:00
ngosang
95c8d078f1 Changes in User-Agent 2015-06-12 01:21:26 +02:00
ngosang
4b3d3f6ea6 Cppcheck: scope reduction & unused variables 2015-06-12 01:04:16 +02:00
ngosang
d783787ceb [Search engine] Show the version of search engines 2015-06-12 00:02:04 +02:00
Heiko Becker
1ef9a1151d Add missing QDataStream include
Fixes building with Qt 5.5.0-beta.
2015-05-26 13:36:30 +02:00
sledgehammer999
baa586a6f7 Update Copyright year. 2015-05-13 23:25:38 +03:00
sledgehammer999
c0454fbd02 Fix typo in configure script. 2015-05-13 23:04:46 +03:00
LazyBui
03fb897717 Removing the confusion caused by moving GeoIP code/.dat to a different directory 2015-05-13 23:00:33 +03:00
Gabriele
43cd295b0c configure: don't fail when $CPPFLAGS starts with a white space 2015-05-11 19:05:25 +03:00
sledgehammer999
80b2d00c7a Correctly detect FreeBSD when configuring.
Thanks to yurivict for helping.
Closes #2962.
2015-05-11 00:49:26 +03:00
sledgehammer999
83e4059cea Fix configure typo. 2015-05-11 00:49:16 +03:00
David Christenson
92a250cdb3 Fix variable names
Change undeclared identifiers `running_` and `paramsQueue_` to their
proper names.
2015-05-10 17:56:10 +03:00
Gabriele
1a52368f79 Fix sorting torrents by ETA
Closes #2965.
2015-05-10 14:34:41 +02:00
Chocobo1
cbc0e2527a Fix potential negative loop bound.
QTorrentHandle::num_files() could return -1 in these cases.
2015-05-10 15:16:37 +08:00
sledgehammer999
52f8f9beb4 Bump to 3.2.0 2015-05-10 04:20:19 +03:00
sledgehammer999
3f110dabed Update Transifex config file. 2015-05-10 04:20:06 +03:00
Gabriele
5af4dde3f3 Increase priority value of "High"
It was observed that setting the priority of a file to High has almost
no effect, so increase its value.
2015-03-27 17:55:50 +01:00
Gabriele
10880e10f1 Use enums instead of values when dealing with file priorities 2015-03-27 17:43:14 +01:00
216 changed files with 105272 additions and 67057 deletions

9
.gitignore vendored
View File

@@ -2,13 +2,19 @@ src/gui/geoip/GeoIP.dat
src/gui/geoip/GeoIP.dat.gz src/gui/geoip/GeoIP.dat.gz
src/qbittorrent src/qbittorrent
src/qbittorrent-nox src/qbittorrent-nox
src/release
src/debug
qbittorrent.pro.user* qbittorrent.pro.user*
conf.pri conf.pri
Makefile Makefile*
*.pyc *.pyc
*.log *.log
# Compiled object files # Compiled object files
*.o *.o
*.pdb
*.exe
# Generated MOC, resource and UI files # Generated MOC, resource and UI files
moc_*.cpp moc_*.cpp
qrc_*.cpp qrc_*.cpp
@@ -19,6 +25,7 @@ src/lang/qbittorrent_*.qm
.qmake.stash .qmake.stash
src/qbittorrent.app src/qbittorrent.app
*.dmg *.dmg
#Autotools junk #Autotools junk
aclocal.m4 aclocal.m4
autom4te.cache/* autom4te.cache/*

View File

@@ -1,16 +1,17 @@
language: language: cpp
- cpp
env: env:
# use libtorrent 0.15.10 matrix:
# uncomment when Travis doesn't use Ubuntu 12.04 LTS, which has libtorrent 0.15.10 as package # Uncomment when Travis upgraded "Ubuntu 12.04 LTS" to a newer version whose repo will have a more up-to-date libtorrent package
#- lt_source=from_dist gui=true #- lt_branch=dist gui=true
#- lt_source=from_dist gui=false #- lt_branch=dist gui=false
# use libtorrent 0.16.X from RC_0_16 svn branch - lt_branch=RC_0_16 gui=true
- lt_source=from_svnRC_0_16 gui=true - lt_branch=RC_0_16 gui=false
- lt_source=from_svnRC_0_16 gui=false - lt_branch=RC_1_0 gui=true
- lt_source=from_svnRC_1_0 gui=true - lt_branch=RC_1_0 gui=false
- lt_source=from_svnRC_1_0 gui=false global:
- secure: "OI9CUjj4lTb0HwwIZU5PbECU3hLlAL6KC8KsbwohG8/O3j5fLcnmDsK4Ad9us5cC39sS11Jcd1kDP2qRcCuST/glVNhLkcjKkiQerOfd5nQ/qL4JYfz/1mfP5mdpz9jHKzpLUIG+TXkbSTjP6VVmsb5KPT+3pKEdRFZB+Pu9+J8="
- coverity_branch: coverity_scan
branches: branches:
except: except:
@@ -20,41 +21,76 @@ branches:
notifications: notifications:
email: email:
on_success: change on_success: change
on_failure: change on_failure: change
# container-based builds
sudo: false
cache:
directories:
- $HOME/.ccache
addons:
coverity_scan:
project:
name: "qbittorrent/qBittorrent"
description: "Build submitted via Travis CI"
build_command_prepend: "./bootstrap.sh && ./configure $qbtconf"
build_command: make
branch_pattern: $coverity_branch
notification_email: sledgehammer999@qbittorrent.org
apt:
packages:
# packages list: https://github.com/travis-ci/apt-package-whitelist/blob/master/ubuntu-precise
- autoconf
- automake
- colormake
- libssl-dev
- libboost-dev
- libboost-system-dev
- libgeoip-dev
- libqt4-dev
# Uncomment when Travis upgraded "Ubuntu 12.04 LTS" to a newer version whose repo will have a more up-to-date libtorrent package
#- libtorrent-rasterbar6
#- libboost-filesystem-dev
before_install: before_install:
# Only allow specific build for coverity scan, others will stop
- if [ "$TRAVIS_BRANCH" = "$coverity_branch" ] && ! [[ "$lt_branch" == "RC_1_0" && "$gui" == "true" ]]; then exit ; fi
- shopt -s expand_aliases - shopt -s expand_aliases
- alias sudo="sudo " - if ! [ "$TRAVIS_BRANCH" = "$coverity_branch" ]; then dpkg-query -L ccache && export PATH="/usr/lib/ccache/:$PATH" ; fi
# Using nprocs/2 sometimes may fail (gcc is killed by system), just use two threads - alias make="colormake -j3" # Using nprocs/2 sometimes may fail (gcc is killed by system)
- alias make="colormake -j2 "
- libt_path="$HOME/libt_install"
- qbt_path="$HOME/qbt_install"
- ltconf="$ltconf --prefix="$libt_path" --with-libgeoip=system"
- qbtconf="$qbtconf --prefix="$qbt_path" PKG_CONFIG_PATH="$libt_path/lib/pkgconfig":$PKG_CONFIG_PATH"
# Options for specific branches
- if [[ "$lt_branch" == "RC_0_16" ]]; then qbtconf="$qbtconf --with-libtorrent-rasterbar0.16" ; fi
# Also setup a virtual display for after_success target when gui == true # Also setup a virtual display for after_success target when gui == true
- if ! $gui; then qbtconf="$qbtconf --disable-gui"; else export "DISPLAY=:99.0" && /sbin/start-stop-daemon --start --quiet --pidfile /tmp/custom_xvfb_99.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :99 -ac -screen 0 1280x1024x16 ; fi - if ! $gui; then qbtconf="$qbtconf --disable-gui" ; else export "DISPLAY=:99.0" && /sbin/start-stop-daemon --start --quiet --pidfile /tmp/custom_xvfb_99.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :99 -ac -screen 0 1280x1024x16 ; fi
- qbtconf="$qbtconf --with-qt4"
- ltconf=" --with-libgeoip=system"
- echo settings # Print settings
- echo $lt_source - echo $lt_branch
- echo $ltconf
- echo $gui - echo $gui
- echo $ltconf
- echo $qbtconf - echo $qbtconf
- ccache -V && ccache --show-stats && ccache --zero-stats
- sudo apt-get -qq update
# Travis can stall during heavy load if these packages are installed in one step - split the command
- sudo apt-get -qq install debhelper autoconf automake colormake libssl-dev libgeoip-dev
# uncomment when Travis doesn't use Ubuntu 12.04 LTS, which has libtorrent 0.15.10 as package
#- sudo apt-get -qq install libboost-dev libboost-filesystem-dev libboost-system-dev
- sudo apt-get -qq install libboost-dev libboost-system-dev
- sudo apt-get -qq install libqt4-dev
install: install:
#- if [[ "$lt_source" == "from_dist" ]]; then sudo apt-get -qq install libtorrent-rasterbar-dev; fi - if ! [ "$lt_branch" == "dist" ]; then cd "$HOME" && pwd && git clone --depth 1 https://github.com/arvidn/libtorrent.git --branch $lt_branch --single-branch ; fi
- if [[ "$lt_source" == "from_svnRC_0_16" ]]; then qbtconf="$qbtconf --with-libtorrent-rasterbar0.16" && cd .. && svn co svn://svn.code.sf.net/p/libtorrent/code/branches/RC_0_16 ./libtorrent && (cd libtorrent && ./autotool.sh && ./configure $ltconf && sudo make install) && sudo ldconfig /usr/local/lib && cd $TRAVIS_BUILD_DIR ; fi - if ! [ "$lt_branch" == "dist" ]; then cd libtorrent && ./autotool.sh && ./configure $ltconf && make install && cd "$TRAVIS_BUILD_DIR" ; fi
- if [[ "$lt_source" == "from_svnRC_1_0" ]]; then cd .. && svn co svn://svn.code.sf.net/p/libtorrent/code/branches/RC_1_0 ./libtorrent && (cd libtorrent && ./autotool.sh && ./configure $ltconf && sudo make install) && sudo ldconfig /usr/local/lib && cd $TRAVIS_BUILD_DIR ; fi
script: script:
- ./bootstrap.sh - if [ "$TRAVIS_BRANCH" = "$coverity_branch" ]; then exit ; fi # Skip usual build when running coverity scan
- ./configure $qbtconf && sudo make install - ./bootstrap.sh && ./configure $qbtconf
- make install
after_success: after_success:
- if $gui ; then qbittorrent --version ; else qbittorrent-nox --version ; fi - cd "$qbt_path/bin"
- export LD_PRELOAD="$libt_path/lib/libtorrent-rasterbar.so:$LD_PRELOAD"
- if $gui ; then ./qbittorrent --version ; else ./qbittorrent-nox --version ; fi
after_script:
- ccache --show-stats

View File

@@ -1,7 +1,7 @@
[main] [main]
host = https://www.transifex.com host = https://www.transifex.com
[qbittorrent.qbittorrent_master] [qbittorrent.qbittorrent_v3_2_x]
file_filter = src/lang/qbittorrent_<lang>.ts file_filter = src/lang/qbittorrent_<lang>.ts
source_file = src/lang/qbittorrent_en.ts source_file = src/lang/qbittorrent_en.ts
source_lang = en source_lang = en

160
Changelog
View File

@@ -1,3 +1,163 @@
* Sat Oct 31 2015 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v3.2.5
- BUGFIX: Fix difficult to reproduce crash. (glassez)
- OTHER: Fix Windows' Qt5 build. (Gelmir)
* Sat Oct 10 2015 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v3.2.4
- FEATURE: Select the file of single file torrents when opening destination folder (pmzqla)
- BUGFIX: Fix crash with invalid favicon. Closes #3632. (glassez)
- BUGFIX: Try to download favicon.png when the download of favicon.ico fails (pmzqla)
- BUGFIX: Try to avoid loading a corrupted configuration file. Also log errors encountered while saving/loading the configuration. Closes #3503. (sledgehammer999)
- BUGFIX: Allow adding torrent link from Torcache (jsayol)
- BUGFIX: Don't limit the number of torrents that can be announced to the tracker/dht/lsd. Closes #3473. (sledgehammer999)
- BUGFIX: Fix potential crash when memory allocation failed. Closes #3877. (Chocobo1)
- COSMETIC: Change Queue buttons order in the Toolbar (GUI & Web UI) (ngosang)
- COSMETIC: Move option "Ignore transfer limits on local network" to Speed page (Chocobo1)
- COSMETIC: Move option "Confirm torrent deletion" to Behavior page (Chocobo1)
- COSMETIC: Fix typos. Make `μTP` untranslatable. Use American variation of words. Closes #3654. (sledgehammer999)
- COSMETIC: Optimize text color for dark themes. Closes #3633 and #3815. (sledgehammer999)
- COSMETIC: Show current label in the torrent context menu. Closes #3776. (sledgehammer999)
- WEBUI: Add save_path to /query/torrents (Casey Bodley)
- WEBUI: Bump API_VERSION to 5
- SEARCH: Fix python detection when the 'Anaconda' software is installed. Closes #3731. (sledgehammer999)
- RSS: Handle magnet links as torrents instead of news URLs. Closes #3560 (ngosang)
- RSS: Trim elements text in RSS articles (ngosang)
- RSS: Fix contextual menu in RSS torrents list (ngosang)
- RSS: Improve error handling when a RSS feed doesn't contain torrents (ngosang)
- RSS: More precise message and code simplification in RSS feeds deletion (ngosang)
- RSS: Don't hide the elements in Unread list when clicked (ngosang)
- RSS: Allow multiple selection in RSS torrents list (ngosang)
- RSS: Simplify string translation (ngosang)
- RSS: Handle more types of RSS feeds (ngosang)
- RSS: Fix RSS panel position not saved (ngosang)
- RSS: Fix forgetting label changes to first item in RSS rule list. (Gelmir)
- RSS: Add label to UI when a new one is creating during rule addition. (Gelmir)
- RSS: Removes refresh message when adding a new feed (ngosang)
- RSS: Fix RSS crash when deleting RSS feeds. Closes #997, #2152, #2461, #3718, #3747, #3766, #3806, #3814, #3829 and #3846. (ngosang)
- RSS: Sort labels in RSS Downloader dialog, closes #3140. (Chocobo1)
- WINDOWS: Correctly show german letters in the installer. Closes #3574, #3566. (sledgehammer999)
- WINDOWS: Fix file selection on Explorer when the filename contains weird characters. Closes #3185. (sledgehammer999)
- WINDOWS: Fix wrong default download directory in Windows. Closes #2625. (Chocobo1)
- WINDOWS: Fix German translation of the installer. (netswap)
- LINUX: Fix broken .desktop file icon for some locales. See #3905. (sledgehammer999)
- OTHER: Fix ppc64le detection during configure (sledgehammer999)
- OTHER: Don't use sed in configure. Closes #3169. (pmzqla)
- OTHER: Fix broken donation link. Closes #3771. (sledgehammer999)
- OTHER: Add forum link in README. Closes #3853. (sledgehammer999)
- OTHER: New translation: Esperanto
- OTHER: Fix Qt5 nox build on non-Windows. (sledgehammer999)
* Sun Aug 02 2015 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v3.2.3
- BUGFIX: Fix crash when closing a search tab while search is running (pmzqla)
- SEARCH: Other minor search fixes and improvements (pmzqla)
* Sat Aug 01 2015 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v3.2.2
- FEATURE: Allow to force reannounce DHT too (Chocobo1)
- FEATURE: Implement an option to disable confirmation of torrent recheck (blaxspirit)
- FEATURE: Allow to copy all the trackers with a keyboard shortcut (pmzqla)
- BUGFIX: Fix torrent renaming. Closes #3398 (ngosang)
- BUGFIX: Fix localhost address (::ffff:127.0.0.1) is not recognized when connecting to WebUI (Chocobo1)
- BUGFIX: Fix '&' character in label name becomes accelerator key, closes #3454. (Chocobo1)
- BUGFIX: Fix HTTP header parsing when torrent filename contains a semicolon. Closes #3511.
- BUGFIX: Fix installing search plugin from local file. (sledgehammer999)
- BUGFIX: Fix installing search plugin by drag-n-dropping file. (sledgehammer999)
- COSMETIC: Update color scheme of completed.png icon. (sledgehammer999)
- COSMETIC: Fix printing of the copyright symbol in the About dialog. (sledgehammer999)
- COSMETIC: Minor changes in Preview File dialog (ngosang)
- COSMETIC: Add Force Resume icon (ngosang)
- COSMETIC: Add count of unread items to RSS tab label (pmzqla)
- WEBUI: Ports between 1 and 65535 as in the GUI. Closes #1602 (ngosang)
- WEBUI: Fix an error in Content tab when the torrent doesn't have metadata (ngosang)
- WEBUI: New option Web UI port UPNP. Closes #3358 (ngosang)
- WEBUI: Fix API Content Types. Closes #3393 (ngosang)
- WEBUI: Fix empty trackers addition (ngosang)
- WEBUI: Torrent download from hash. Closes #1173 (ngosang)
- WEBUI: Fix sort by queue number (ngosang)
- WEBUI: Open external links in a new window/tab (ngosang)
- WEBUI: Massive increase in performance. (ngosang)
- SEARCH: Search status per tab (DoumanAsh)
- SEARCH: Remove the word 'torrent' in ExtraTorrent results (ngosang)
- SEARCH: Prefer python3 over python2 on Linux and OS X (pmzqla)
- SEARCH: Show notification if Python is not found and a search is started (pmzqla)
- SEARCH: Update link to the Windows Python installer (pmzqla)
- SEARCH: Improve checks for python. Print python version and path to log. (sledgehammer999)
- SEARCH: Improve Python detection (ngosang)
- OTHER: Improvements on the build system (Chocobo1)
- OTHER: Bump minimum libtorrent version required to 1.0.6/0.16.19. (sledgehammer999)
- OTHER: New translation: Slovenian
* Sat Jul 11 2015 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v3.2.1
- FEATURE: Change default preferences (ngosang)
- FEATURE: Add "Add link to torrent" menu in TrayIconMenu. Closes #2918. (Chocobo1)
- FEATURE: Allow to Open files from the properties pane by pressing "Enter" (pmzqla)
- FEATURE: Add checkbox option for IpFilterTrackers. (Chocobo1)
- FEATURE: Download-from-URL textbox change focus on tab key (Mayank Asthana)
- FEATURE: Increase priority value of "High" (pmzqla)
- FEATURE: Add 16 KiB, 8 MiB and 16 MiB piece sizes in Torrent Creator (ngosang)
- BUGFIX: Disable Auto piece size when creating a new torrent (ngosang)
- BUGFIX: Set default focus to cancel button in delete confirm dlg, closes #3085 (Chocobo1)
- BUGFIX: Set default focus to ok button in add new torrent dlg (Chocobo1)
- BUGFIX: Set default focus to no button in exit confirm box (Chocobo1)
- BUGFIX: Fix Start Minimized checkbox in Options (ngosang)
- BUGFIX: Remove limits on alternative speeds setting (LazyBui)
- BUGFIX: Fix sorting torrents by ETA (pmzqla)
- BUGFIX: Improve ratio calculation formula. Closes #3096. (Chocobo1)
- BUGFIX: Clear missing files flag when resuming or force rechecking. Fixes issues in #2750. (sledgehammer999)
- BUGFIX: Delete tempfile when downloading favicon.ico. Closes #3257. (sledgehammer999)
- BUGFIX: Don't close downloadFromURL dialog when showing empty url warning (Chocobo1)
- BUGFIX: Minimize to tray only if the relevant option is enabled. (sledgehammer999)
- BUGFIX: Update disk space label after changing partition, closes #3309. (Chocobo1)
- BUGFIX: Don't use a default upload limit. Closes #3275. (sledgehammer999)
- BUGFIX: Fix Properties bar size when started minimized to tray. Closes #3206. (sledgehammer999)
- COSMETIC: Change option text "Confirmation on exit when torrents are active" (Chocobo1)
- COSMETIC: Enable to choose dark/light tray icons on all platforms. (Chocobo1)
- COSMETIC: Use AllUppercase for label text (Chocobo1)
- COSMETIC: changes in typography (ngosang)
- COSMETIC: Menu revamp (Chocobo1)
- COSMETIC: Revamp general tab info (Chocobo1)
- COSMETIC: Better update message for users (Chocobo1)
- COSMETIC: Fix ugly 'C++' wrapping in About dialog. (glassez)
- WEBUI: Fix login and logout relative URLs (ngosang)
- WEBUI: Fix resumeAll and pauseAll. Closes #3016 (ngosang)
- WEBUI: Changes in title bar (ngosang)
- WEBUI: Complete translatable strings (ngosang)
- WEBUI: Minor changes in style (ngosang)
- WEBUI: Fix Max connections and Time active in transfer information (ngosang)
- WEBUI: New config - Global maximum number of upload slots (ngosang)
- WEBUI: Display wasted data with friendly units. Closes #2994 (ngosang)
- WEBUI: add delay in shutdown command in order to send out response msg (Chocobo1)
- WEBUI: Option to hide Top Toolbar (ngosang)
- WEBUI: Reorder the tabs/groups in Options window (ngosang)
- WEBUI: Add new options (ngosang)
- WEBUI: Increase API_VERSION due to changes in #3279, #3197, #3226 and #3040 (ngosang)
- WEBUI: Add Web Seeds (HTTP Sources) tab (ngosang)
- WEBUI: Don't update the tabs if tab's panel is collapsed (ngosang)
- WEBUI: Fix alternative global rate limits. (ngosang)
- SEARCH: Fix thepiratebay. Closes #3012 (ngosang)
- SEARCH: Improve torrentz engine to return more results (ngosang)
- SEARCH: Change width of columns in search tab. Closes #764 (ngosang)
- SEARCH: Make strings translatable in seach engine (ngosang)
- SEARCH: Aborting search engine process during closure. Close #2671 (DoumanAsh)
- SEARCH: Perform searches in parallel (DoumanAsh)
- SEARCH: Add Demonoid search engine (ngosang)
- SEARCH: Minor fixes in search engines (ngosang)
- SEARCH: Show the version of search engines (ngosang)
- SEARCH: Update Legit Torrent to remove sgmllib (DoumanAsh)
- SEARCH: Update KickassTorrents (ngosang)
- SEARCH: Update BTDigg (ngosang)
- SEARCH: Update Torrentz (ngosang)
- SEARCH: Update ExtraTorrent (ngosang)
- SEARCH: Update TorrentReactor (ngosang)
- SEARCH: Fix Python 2 implementation of Torrentz (ngosang)
- SEARCH: Cosmetic changes in search engine (ngosang)
- SEARCH: Fix column sort in search engine. Closes #2621 (ngosang)
- RSS: Update matching RSS articles while editing rules (pmzqla)
- WINDOWS: Fix python detection from registry when multiple versions are installed (sledgehammer999)
- LINUX: Fixes Linux issue for when the theme doesn't have a corresponding icon. (sledgehammer999)
- OTHER: Correctly detect FreeBSD when configuring. (sledgehammer999, yurivict)
- OTHER: Add translator to credits.
- OTHER: New translation: Indonesian.
- OTHER: Split Chinese locales into Chinese Simplified, Chinese Traditional(Taiwan), Chinese Traditional(Hong Kong). (sledgehammer999)
* Sun May 10 2015 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v3.2.0 * Sun May 10 2015 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v3.2.0
- FEATURE: Show actual protocol for listen success/failure in the log. Needs libtorrent v1.0.0 (Gelmir) - FEATURE: Show actual protocol for listen success/failure in the log. Needs libtorrent v1.0.0 (Gelmir)
- FEATURE: Support per tracker re-announce. Needs libtorrent v1.0.0 (Gelmir) - FEATURE: Support per tracker re-announce. Needs libtorrent v1.0.0 (Gelmir)

View File

@@ -14,7 +14,7 @@ qBittorrent - A BitTorrent client in C++ / Qt4
- pkg-config executable - pkg-config executable
- libtorrent-rasterbar by Arvid Norberg (>= 0.15.0) - libtorrent-rasterbar by Arvid Norberg (>= 0.16.19 OR >= 1.0.6)
-> http://www.libtorrent.net -> http://www.libtorrent.net
Be careful: another library (the one used by rTorrent) uses a similar name. Be careful: another library (the one used by rTorrent) uses a similar name.
@@ -44,7 +44,7 @@ qBittorrent - A BitTorrent client in C++ / Qt4
- pkg-config executable - pkg-config executable
- libtorrent-rasterbar by Arvid Norberg (>= v0.15.0) - libtorrent-rasterbar by Arvid Norberg (>= 0.16.19 OR >= v1.0.6)
-> http://www.libtorrent.net -> http://www.libtorrent.net
Be careful: another library (the one used by rTorrent) uses a similar name. Be careful: another library (the one used by rTorrent) uses a similar name.

View File

@@ -1,9 +1,10 @@
qBittorrent - A BitTorrent client in Qt qBittorrent - A BitTorrent client in Qt
------------------------------------------ ------------------------------------------
[![Build Status](https://travis-ci.org/qbittorrent/qBittorrent.png?branch=master)](https://travis-ci.org/qbittorrent/qBittorrent) [![Build Status](https://travis-ci.org/qbittorrent/qBittorrent.svg?branch=v3_2_x)](https://travis-ci.org/qbittorrent/qBittorrent)
[![Coverity Status](https://scan.coverity.com/projects/5494/badge.svg)](https://scan.coverity.com/projects/5494)
******************************** ********************************
###Description: ### Description:
qBittorrent is a bittorrent client programmed in C++ / Qt that uses qBittorrent is a bittorrent client programmed in C++ / Qt that uses
libtorrent (sometimes called libtorrent-rasterbar) by Arvid Norberg. libtorrent (sometimes called libtorrent-rasterbar) by Arvid Norberg.
@@ -31,6 +32,9 @@ http://www.qbittorrent.org
or our wiki here: or our wiki here:
http://wiki.qbittorrent.org http://wiki.qbittorrent.org
Use the forum for troubleshooting before reporting bugs:
http://forum.qbittorrent.org
Please report any bug (or feature request) to: Please report any bug (or feature request) to:
http://bugs.qbittorrent.org http://bugs.qbittorrent.org
@@ -39,4 +43,3 @@ You can also meet me (sledgehammer_999) on IRC:
------------------------------------------ ------------------------------------------
sledgehammer999 <sledgehammer999@qbittorrent.org> sledgehammer999 <sledgehammer999@qbittorrent.org>

63
configure vendored
View File

@@ -1390,13 +1390,13 @@ Optional Packages:
--with-geoip-database-embedded --with-geoip-database-embedded
Embed the GeoIP database in the qBittorrent Embed the GeoIP database in the qBittorrent
executable (please follow instructions in executable (please follow instructions in
src/geoip/README) (default=no) src/gui/geoip/README) (default=no)
--with-qtsingleapplication=[system|shipped] --with-qtsingleapplication=[system|shipped]
Use the shipped qtsingleapplication library or the Use the shipped qtsingleapplication library or the
system one (default=shipped) system one (default=shipped)
--with-qjson=[system|shipped] --with-qjson=[system|shipped]
Use the shipped qjson library or the system one Use the shipped qjson library or the system one
(default=shipped) (Qt4 only (default=shipped) (Qt4 only)
--with-boost[=ARG] use Boost library from a standard location --with-boost[=ARG] use Boost library from a standard location
(ARG=yes), from the specified location (ARG=<path>), (ARG=yes), from the specified location (ARG=<path>),
or disable it (ARG=no) [ARG=yes] or disable it (ARG=no) [ARG=yes]
@@ -3275,7 +3275,7 @@ IFS=$ac_save_IFS
case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
am__api_version='1.14' am__api_version='1.15'
# Find a good install program. We prefer a C program (faster), # Find a good install program. We prefer a C program (faster),
# so one script is as good as another. But avoid the broken or # so one script is as good as another. But avoid the broken or
@@ -3464,7 +3464,7 @@ else
$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} $as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;}
fi fi
if test x"${install_sh}" != xset; then if test x"${install_sh+set}" != xset; then
case $am_aux_dir in case $am_aux_dir in
*\ * | *\ *) *\ * | *\ *)
install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
@@ -3855,8 +3855,8 @@ MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html> # <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
mkdir_p='$(MKDIR_P)' mkdir_p='$(MKDIR_P)'
# We need awk for the "check" target. The system "awk" is bad on # We need awk for the "check" target (and possibly the TAP driver). The
# some platforms. # system "awk" is bad on some platforms.
# Always define AMTAR for backward compatibility. Yes, it's still used # Always define AMTAR for backward compatibility. Yes, it's still used
# in the wild :-( We should find a proper way to deprecate it ... # in the wild :-( We should find a proper way to deprecate it ...
AMTAR='$${TAR-tar}' AMTAR='$${TAR-tar}'
@@ -4263,7 +4263,7 @@ fi
# Detect OS # Detect OS
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether OS is FreeBSD" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether OS is FreeBSD" >&5
$as_echo_n "checking whether OS is FreeBSD... " >&6; } $as_echo_n "checking whether OS is FreeBSD... " >&6; }
if test "x$host_os" = "x*FreeBSD*"; then : if expr "$host_os" : ".*freebsd.*" > /dev/null; then :
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; } $as_echo "yes" >&6; }
LIBS="-lexecinfo $LIBS" LIBS="-lexecinfo $LIBS"
@@ -5294,8 +5294,8 @@ $as_echo "$as_me: Boost.System LIB: $BOOST_SYSTEM_LIB" >&6;}
LIBS="$BOOST_SYSTEM_LIB $LIBS" LIBS="$BOOST_SYSTEM_LIB $LIBS"
fi fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to compile using libtorrent-raser 0.16.x" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to compile using libtorrent-rasterbar 0.16.x" >&5
$as_echo_n "checking whether to compile using libtorrent-raser 0.16.x... " >&6; } $as_echo_n "checking whether to compile using libtorrent-rasterbar 0.16.x... " >&6; }
case "x$with_libtorrent_rasterbar0_16" in #( case "x$with_libtorrent_rasterbar0_16" in #(
"xno") : "xno") :
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
@@ -5309,12 +5309,12 @@ if test -n "$libtorrent_CFLAGS"; then
pkg_cv_libtorrent_CFLAGS="$libtorrent_CFLAGS" pkg_cv_libtorrent_CFLAGS="$libtorrent_CFLAGS"
elif test -n "$PKG_CONFIG"; then elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \ if test -n "$PKG_CONFIG" && \
{ { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libtorrent-rasterbar >= 1.0.0\""; } >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libtorrent-rasterbar >= 1.0.6\""; } >&5
($PKG_CONFIG --exists --print-errors "libtorrent-rasterbar >= 1.0.0") 2>&5 ($PKG_CONFIG --exists --print-errors "libtorrent-rasterbar >= 1.0.6") 2>&5
ac_status=$? ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then test $ac_status = 0; }; then
pkg_cv_libtorrent_CFLAGS=`$PKG_CONFIG --cflags "libtorrent-rasterbar >= 1.0.0" 2>/dev/null` pkg_cv_libtorrent_CFLAGS=`$PKG_CONFIG --cflags "libtorrent-rasterbar >= 1.0.6" 2>/dev/null`
test "x$?" != "x0" && pkg_failed=yes test "x$?" != "x0" && pkg_failed=yes
else else
pkg_failed=yes pkg_failed=yes
@@ -5326,12 +5326,12 @@ if test -n "$libtorrent_LIBS"; then
pkg_cv_libtorrent_LIBS="$libtorrent_LIBS" pkg_cv_libtorrent_LIBS="$libtorrent_LIBS"
elif test -n "$PKG_CONFIG"; then elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \ if test -n "$PKG_CONFIG" && \
{ { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libtorrent-rasterbar >= 1.0.0\""; } >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libtorrent-rasterbar >= 1.0.6\""; } >&5
($PKG_CONFIG --exists --print-errors "libtorrent-rasterbar >= 1.0.0") 2>&5 ($PKG_CONFIG --exists --print-errors "libtorrent-rasterbar >= 1.0.6") 2>&5
ac_status=$? ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then test $ac_status = 0; }; then
pkg_cv_libtorrent_LIBS=`$PKG_CONFIG --libs "libtorrent-rasterbar >= 1.0.0" 2>/dev/null` pkg_cv_libtorrent_LIBS=`$PKG_CONFIG --libs "libtorrent-rasterbar >= 1.0.6" 2>/dev/null`
test "x$?" != "x0" && pkg_failed=yes test "x$?" != "x0" && pkg_failed=yes
else else
pkg_failed=yes pkg_failed=yes
@@ -5352,14 +5352,14 @@ else
_pkg_short_errors_supported=no _pkg_short_errors_supported=no
fi fi
if test $_pkg_short_errors_supported = yes; then if test $_pkg_short_errors_supported = yes; then
libtorrent_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libtorrent-rasterbar >= 1.0.0" 2>&1` libtorrent_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libtorrent-rasterbar >= 1.0.6" 2>&1`
else else
libtorrent_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libtorrent-rasterbar >= 1.0.0" 2>&1` libtorrent_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libtorrent-rasterbar >= 1.0.6" 2>&1`
fi fi
# Put the nasty error message in config.log where it belongs # Put the nasty error message in config.log where it belongs
echo "$libtorrent_PKG_ERRORS" >&5 echo "$libtorrent_PKG_ERRORS" >&5
as_fn_error $? "Package requirements (libtorrent-rasterbar >= 1.0.0) were not met: as_fn_error $? "Package requirements (libtorrent-rasterbar >= 1.0.6) were not met:
$libtorrent_PKG_ERRORS $libtorrent_PKG_ERRORS
@@ -5404,12 +5404,12 @@ if test -n "$libtorrent_CFLAGS"; then
pkg_cv_libtorrent_CFLAGS="$libtorrent_CFLAGS" pkg_cv_libtorrent_CFLAGS="$libtorrent_CFLAGS"
elif test -n "$PKG_CONFIG"; then elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \ if test -n "$PKG_CONFIG" && \
{ { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libtorrent-rasterbar >= 0.16.0\""; } >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libtorrent-rasterbar >= 0.16.19\""; } >&5
($PKG_CONFIG --exists --print-errors "libtorrent-rasterbar >= 0.16.0") 2>&5 ($PKG_CONFIG --exists --print-errors "libtorrent-rasterbar >= 0.16.19") 2>&5
ac_status=$? ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then test $ac_status = 0; }; then
pkg_cv_libtorrent_CFLAGS=`$PKG_CONFIG --cflags "libtorrent-rasterbar >= 0.16.0" 2>/dev/null` pkg_cv_libtorrent_CFLAGS=`$PKG_CONFIG --cflags "libtorrent-rasterbar >= 0.16.19" 2>/dev/null`
test "x$?" != "x0" && pkg_failed=yes test "x$?" != "x0" && pkg_failed=yes
else else
pkg_failed=yes pkg_failed=yes
@@ -5421,12 +5421,12 @@ if test -n "$libtorrent_LIBS"; then
pkg_cv_libtorrent_LIBS="$libtorrent_LIBS" pkg_cv_libtorrent_LIBS="$libtorrent_LIBS"
elif test -n "$PKG_CONFIG"; then elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \ if test -n "$PKG_CONFIG" && \
{ { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libtorrent-rasterbar >= 0.16.0\""; } >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libtorrent-rasterbar >= 0.16.19\""; } >&5
($PKG_CONFIG --exists --print-errors "libtorrent-rasterbar >= 0.16.0") 2>&5 ($PKG_CONFIG --exists --print-errors "libtorrent-rasterbar >= 0.16.19") 2>&5
ac_status=$? ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then test $ac_status = 0; }; then
pkg_cv_libtorrent_LIBS=`$PKG_CONFIG --libs "libtorrent-rasterbar >= 0.16.0" 2>/dev/null` pkg_cv_libtorrent_LIBS=`$PKG_CONFIG --libs "libtorrent-rasterbar >= 0.16.19" 2>/dev/null`
test "x$?" != "x0" && pkg_failed=yes test "x$?" != "x0" && pkg_failed=yes
else else
pkg_failed=yes pkg_failed=yes
@@ -5447,14 +5447,14 @@ else
_pkg_short_errors_supported=no _pkg_short_errors_supported=no
fi fi
if test $_pkg_short_errors_supported = yes; then if test $_pkg_short_errors_supported = yes; then
libtorrent_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libtorrent-rasterbar >= 0.16.0" 2>&1` libtorrent_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libtorrent-rasterbar >= 0.16.19" 2>&1`
else else
libtorrent_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libtorrent-rasterbar >= 0.16.0" 2>&1` libtorrent_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libtorrent-rasterbar >= 0.16.19" 2>&1`
fi fi
# Put the nasty error message in config.log where it belongs # Put the nasty error message in config.log where it belongs
echo "$libtorrent_PKG_ERRORS" >&5 echo "$libtorrent_PKG_ERRORS" >&5
as_fn_error $? "Package requirements (libtorrent-rasterbar >= 0.16.0) were not met: as_fn_error $? "Package requirements (libtorrent-rasterbar >= 0.16.19) were not met:
$libtorrent_PKG_ERRORS $libtorrent_PKG_ERRORS
@@ -5801,15 +5801,18 @@ _ACEOF
# Original extract() function contributed by pmzqla # Original extract() function contributed by pmzqla
# $*: Strings to parse # $*: Strings to parse
# Set $DEFINES, $INCLUDES, $OTHER # Set $QBT_CONF_DEFINES, $QBT_CONF_INCLUDES, $QBT_CONF_EXTRA_CFLAGS
extract() { extract() {
if [ -z "$*" ]; then if [ -z "$*" ]; then
echo "Input string required" echo "Input string required"
return 1 return 1
fi fi
# Convert " -" to "\n" if not between quotes # BSD sed needs an actual newline character in the substitute command
string=$(echo " $*" | $SED -e 's: -:\n:g' -e 's:"\(.*\)\n\(.*\)":\"\1 -\2":g' -e "s:'\(.*\)\n\(.*\)':\'\1 -\2':g") new_line='
'
# Convert " -" to "\n" if not between quotes and remove possible leading white spaces
string=$(echo " $*" | $SED -e "s: -:\\${new_line}:g" -e 's:"\(.*\)\n\(.*\)":\"\1 -\2":g' -e "s:'\(.*\)\n\(.*\)':\'\1 -\2':g" -e 's/^[:space:]*//')
SAVEIFS=$IFS SAVEIFS=$IFS
IFS=$(printf "\n\b") IFS=$(printf "\n\b")
for i in $string; do for i in $string; do

View File

@@ -26,7 +26,7 @@ AC_ARG_WITH(libtorrent-rasterbar0.16,
AC_ARG_WITH(geoip-database-embedded, AC_ARG_WITH(geoip-database-embedded,
[AS_HELP_STRING([--with-geoip-database-embedded], [AS_HELP_STRING([--with-geoip-database-embedded],
[Embed the GeoIP database in the qBittorrent executable (please follow instructions in src/geoip/README) (default=no)])], [Embed the GeoIP database in the qBittorrent executable (please follow instructions in src/gui/geoip/README) (default=no)])],
[], [],
[with_geoip_database_embedded=no]) [with_geoip_database_embedded=no])
@@ -38,7 +38,7 @@ AC_ARG_WITH(qtsingleapplication,
AC_ARG_WITH(qjson, AC_ARG_WITH(qjson,
[AS_HELP_STRING([--with-qjson=@<:@system|shipped@:>@], [AS_HELP_STRING([--with-qjson=@<:@system|shipped@:>@],
[Use the shipped qjson library or the system one (default=shipped) (Qt4 only])], [Use the shipped qjson library or the system one (default=shipped) (Qt4 only)])],
[], [],
[with_qjson=shipped]) [with_qjson=shipped])
@@ -74,7 +74,7 @@ AC_ARG_ENABLE(qt-dbus,
# Detect OS # Detect OS
AC_MSG_CHECKING([whether OS is FreeBSD]) AC_MSG_CHECKING([whether OS is FreeBSD])
AS_IF([test "x$host_os" = "x*FreeBSD*"], AS_IF([expr "$host_os" : ".*freebsd.*" > /dev/null],
[AC_MSG_RESULT([yes]) [AC_MSG_RESULT([yes])
LIBS="-lexecinfo $LIBS"], LIBS="-lexecinfo $LIBS"],
[AC_MSG_RESULT([no])]) [AC_MSG_RESULT([no])])
@@ -181,18 +181,18 @@ AS_IF([test "x$BOOST_SYSTEM_LIB" = "x"],
[AC_MSG_NOTICE([Boost.System LIB: $BOOST_SYSTEM_LIB]) [AC_MSG_NOTICE([Boost.System LIB: $BOOST_SYSTEM_LIB])
LIBS="$BOOST_SYSTEM_LIB $LIBS"]) LIBS="$BOOST_SYSTEM_LIB $LIBS"])
AC_MSG_CHECKING([whether to compile using libtorrent-raser 0.16.x]) AC_MSG_CHECKING([whether to compile using libtorrent-rasterbar 0.16.x])
AS_CASE(["x$with_libtorrent_rasterbar0_16"], AS_CASE(["x$with_libtorrent_rasterbar0_16"],
["xno"], ["xno"],
[AC_MSG_RESULT([no]) [AC_MSG_RESULT([no])
PKG_CHECK_MODULES(libtorrent, PKG_CHECK_MODULES(libtorrent,
[libtorrent-rasterbar >= 1.0.0], [libtorrent-rasterbar >= 1.0.6],
[CPPFLAGS="$libtorrent_CFLAGS $CPPFLAGS" [CPPFLAGS="$libtorrent_CFLAGS $CPPFLAGS"
LIBS="$libtorrent_LIBS $LIBS"])], LIBS="$libtorrent_LIBS $LIBS"])],
["xyes"], ["xyes"],
[AC_MSG_RESULT([yes]) [AC_MSG_RESULT([yes])
PKG_CHECK_MODULES(libtorrent, PKG_CHECK_MODULES(libtorrent,
[libtorrent-rasterbar >= 0.16.0], [libtorrent-rasterbar >= 0.16.19],
[CPPFLAGS="$libtorrent_CFLAGS $CPPFLAGS" [CPPFLAGS="$libtorrent_CFLAGS $CPPFLAGS"
LIBS="$libtorrent_LIBS $LIBS"])], LIBS="$libtorrent_LIBS $LIBS"])],
[AC_MSG_RESULT([$with_libtorrent_rasterbar0_16]) [AC_MSG_RESULT([$with_libtorrent_rasterbar0_16])
@@ -251,15 +251,18 @@ AX_DEFINE_DIR([EXPAND_MANDIR], [mandir])
# Original extract() function contributed by pmzqla # Original extract() function contributed by pmzqla
# $*: Strings to parse # $*: Strings to parse
# Set $DEFINES, $INCLUDES, $OTHER # Set $QBT_CONF_DEFINES, $QBT_CONF_INCLUDES, $QBT_CONF_EXTRA_CFLAGS
extract() { extract() {
if [[ -z "$*" ]]; then if [[ -z "$*" ]]; then
echo "Input string required" echo "Input string required"
return 1 return 1
fi fi
# Convert " -" to "\n" if not between quotes # BSD sed needs an actual newline character in the substitute command
string=$(echo " $*" | $SED -e 's: -:\n:g' -e 's:"\(.*\)\n\(.*\)":\"\1 -\2":g' -e "s:'\(.*\)\n\(.*\)':\'\1 -\2':g") new_line='
'
# Convert " -" to "\n" if not between quotes and remove possible leading white spaces
string=$(echo " $*" | $SED -e "s: -:\\${new_line}:g" -e 's:"\(.*\)\n\(.*\)":\"\1 -\2":g' -e "s:'\(.*\)\n\(.*\)':\'\1 -\2':g" -e 's/^[[:space:]]*//')
SAVEIFS=$IFS SAVEIFS=$IFS
IFS=$(printf "\n\b") IFS=$(printf "\n\b")
for i in $string; do for i in $string; do

4
dist/mac/Info.plist vendored
View File

@@ -45,7 +45,7 @@
<key>CFBundlePackageType</key> <key>CFBundlePackageType</key>
<string>APPL</string> <string>APPL</string>
<key>CFBundleShortVersionString</key> <key>CFBundleShortVersionString</key>
<string>3.2.0</string> <string>3.2.5</string>
<key>CFBundleSignature</key> <key>CFBundleSignature</key>
<string>qBit</string> <string>qBit</string>
<key>CFBundleExecutable</key> <key>CFBundleExecutable</key>
@@ -59,7 +59,7 @@
<key>NSAppleScriptEnabled</key> <key>NSAppleScriptEnabled</key>
<string>YES</string> <string>YES</string>
<key>NSHumanReadableCopyright</key> <key>NSHumanReadableCopyright</key>
<string>Copyright © 2006-2013 The qBittorrent project</string> <string>Copyright © 2006-2015 The qBittorrent project</string>
<key>UTExportedTypeDeclarations</key> <key>UTExportedTypeDeclarations</key>
<array> <array>
<dict> <dict>

View File

@@ -57,5 +57,5 @@
</screenshot> </screenshot>
</screenshots> </screenshots>
<url type="homepage">http://www.qbittorrent.org/</url> <url type="homepage">http://www.qbittorrent.org/</url>
<updatecontact>sledgehammer999@qbittorrent.org</updatecontact> <update_contact>sledgehammer999@qbittorrent.org</update_contact>
</component> </component>

View File

@@ -1,4 +1,4 @@
;Installer strings ;Installer strings
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)" ;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_GERMAN} "qBittorrent (erforderlich)" LangString inst_qbt_req ${LANG_GERMAN} "qBittorrent (erforderlich)"
@@ -44,6 +44,6 @@ LangString remove_cache ${LANG_GERMAN} "Torrents und zwischengespeicherte Daten
;LangString uninst_warning ${LANG_ENGLISH} "qBittorrent is running. Please close the application before uninstalling." ;LangString uninst_warning ${LANG_ENGLISH} "qBittorrent is running. Please close the application before uninstalling."
LangString uninst_warning ${LANG_GERMAN} "qBittorrent läuft gerade. Bitte das Programm vor der Deinstallation beenden." LangString uninst_warning ${LANG_GERMAN} "qBittorrent läuft gerade. Bitte das Programm vor der Deinstallation beenden."
;LangString uninst_tor_warn ${LANG_ENGLISH} "Not removing .torrent association. It is associated with:" ;LangString uninst_tor_warn ${LANG_ENGLISH} "Not removing .torrent association. It is associated with:"
LangString uninst_tor_warn ${LANG_GERMAN} "Dateiverknüfung mit .torrent-Dateien konnte nicht entfernt werden, da dieser Typ mit diesem Programm verknüpft ist:" LangString uninst_tor_warn ${LANG_GERMAN} "Dateiverknüpfung mit .torrent-Dateien konnte nicht entfernt werden, da dieser Typ mit diesem Programm verknüpft ist:"
;LangString uninst_mag_warn ${LANG_ENGLISH} "Not removing magnet association. It is associated with:" ;LangString uninst_mag_warn ${LANG_ENGLISH} "Not removing magnet association. It is associated with:"
LangString uninst_mag_warn ${LANG_GERMAN} "Dateiverknüfung mit Magnet-Links konnte nicht entfernt werden, da dieser Typ mit diesem Programm verknüpft ist:" LangString uninst_mag_warn ${LANG_GERMAN} "Dateiverknüpfung mit Magnet-Links konnte nicht entfernt werden, da dieser Typ mit diesem Programm verknüpft ist:"

View File

@@ -19,7 +19,7 @@ XPStyle on
!define CSIDL_APPDATA '0x1A' ;Application Data path !define CSIDL_APPDATA '0x1A' ;Application Data path
!define CSIDL_LOCALAPPDATA '0x1C' ;Local Application Data path !define CSIDL_LOCALAPPDATA '0x1C' ;Local Application Data path
!define PROG_VERSION "3.2.0" !define PROG_VERSION "3.2.5"
!define MUI_FINISHPAGE_RUN !define MUI_FINISHPAGE_RUN
!define MUI_FINISHPAGE_RUN_FUNCTION PageFinishRun !define MUI_FINISHPAGE_RUN_FUNCTION PageFinishRun
!define MUI_FINISHPAGE_RUN_TEXT $(launch_qbt) !define MUI_FINISHPAGE_RUN_TEXT $(launch_qbt)
@@ -33,7 +33,7 @@ OutFile "qbittorrent_${PROG_VERSION}_setup.exe"
;Installer Version Information ;Installer Version Information
VIAddVersionKey "ProductName" "qBittorrent" VIAddVersionKey "ProductName" "qBittorrent"
VIAddVersionKey "CompanyName" "The qBittorrent project" VIAddVersionKey "CompanyName" "The qBittorrent project"
VIAddVersionKey "LegalCopyright" "Copyright ©2006-2014 The qBittorrent project" VIAddVersionKey "LegalCopyright" "Copyright ©2006-2015 The qBittorrent project"
VIAddVersionKey "FileDescription" "qBittorrent - A Bittorrent Client" VIAddVersionKey "FileDescription" "qBittorrent - A Bittorrent Client"
VIAddVersionKey "FileVersion" "${PROG_VERSION}" VIAddVersionKey "FileVersion" "${PROG_VERSION}"

View File

@@ -33,7 +33,7 @@
# and this notice are preserved. This file is offered as-is, without any # and this notice are preserved. This file is offered as-is, without any
# warranty. # warranty.
#serial 23 #serial 26
AC_DEFUN([AX_BOOST_BASE], AC_DEFUN([AX_BOOST_BASE],
[ [
@@ -92,8 +92,11 @@ if test "x$want_boost" = "xyes"; then
libsubdirs="lib" libsubdirs="lib"
ax_arch=`uname -m` ax_arch=`uname -m`
case $ax_arch in case $ax_arch in
x86_64|ppc64|s390x|sparc64|aarch64) x86_64)
libsubdirs="lib64 lib lib64" libsubdirs="lib64 libx32 lib lib64"
;;
ppc64|s390x|sparc64|aarch64|ppc64le)
libsubdirs="lib64 lib lib64 ppc64le"
;; ;;
esac esac
@@ -170,6 +173,10 @@ if test "x$want_boost" = "xyes"; then
dnl if we found no boost with system layout we search for boost libraries dnl if we found no boost with system layout we search for boost libraries
dnl built and installed without the --layout=system option or for a staged(not installed) version dnl built and installed without the --layout=system option or for a staged(not installed) version
if test "x$succeeded" != "xyes"; then if test "x$succeeded" != "xyes"; then
CPPFLAGS="$CPPFLAGS_SAVED"
LDFLAGS="$LDFLAGS_SAVED"
BOOST_CPPFLAGS=
BOOST_LDFLAGS=
_version=0 _version=0
if test "$ac_boost_path" != ""; then if test "$ac_boost_path" != ""; then
if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then
@@ -182,6 +189,12 @@ if test "x$want_boost" = "xyes"; then
VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'` VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'`
BOOST_CPPFLAGS="-I$ac_boost_path/include/boost-$VERSION_UNDERSCORE" BOOST_CPPFLAGS="-I$ac_boost_path/include/boost-$VERSION_UNDERSCORE"
done done
dnl if nothing found search for layout used in Windows distributions
if test -z "$BOOST_CPPFLAGS"; then
if test -d "$ac_boost_path/boost" && test -r "$ac_boost_path/boost"; then
BOOST_CPPFLAGS="-I$ac_boost_path"
fi
fi
fi fi
else else
if test "$cross_compiling" != yes; then if test "$cross_compiling" != yes; then

View File

@@ -222,10 +222,10 @@ bool Application::event(QEvent *ev)
// Get the url instead // Get the url instead
path = static_cast<QFileOpenEvent *>(ev)->url().toString(); path = static_cast<QFileOpenEvent *>(ev)->url().toString();
qDebug("Received a mac file open event: %s", qPrintable(path)); qDebug("Received a mac file open event: %s", qPrintable(path));
if (running_) if (m_running)
processParams(QStringList(path)); processParams(QStringList(path));
else else
paramsQueue_.append(path); m_paramsQueue.append(path);
return true; return true;
} }
else { else {
@@ -253,6 +253,7 @@ void Application::initializeTranslation()
Preferences* const pref = Preferences::instance(); Preferences* const pref = Preferences::instance();
// Load translation // Load translation
QString locale = pref->getLocale(); QString locale = pref->getLocale();
if (locale.isEmpty()) { if (locale.isEmpty()) {
locale = QLocale::system().name(); locale = QLocale::system().name();
pref->setLocale(locale); pref->setLocale(locale);

View File

@@ -379,7 +379,7 @@ QString makeUsage(const QString &prg_name)
#endif #endif
text += QLatin1String("\t-h | --help\t\t") + QObject::tr("Displays this help message") + QLatin1Char('\n'); text += QLatin1String("\t-h | --help\t\t") + QObject::tr("Displays this help message") + QLatin1Char('\n');
text += QLatin1String("\t--webui-port=<port>\t") text += QLatin1String("\t--webui-port=<port>\t")
+ QObject::tr("Changes the webui port (current: %1)").arg(QString::number(Preferences::instance()->getWebUiPort())) + QObject::tr("Changes the Web UI port (current: %1)").arg(QString::number(Preferences::instance()->getWebUiPort()))
+ QLatin1Char('\n'); + QLatin1Char('\n');
#ifndef DISABLE_GUI #ifndef DISABLE_GUI
text += QLatin1String("\t--no-splash\t\t") + QObject::tr("Disable splash screen") + QLatin1Char('\n'); text += QLatin1String("\t--no-splash\t\t") + QObject::tr("Disable splash screen") + QLatin1Char('\n');

View File

@@ -41,6 +41,7 @@
#include "qtlocalpeer.h" #include "qtlocalpeer.h"
#include <QCoreApplication> #include <QCoreApplication>
#include <QDataStream>
#include <QTime> #include <QTime>
#if defined(Q_OS_WIN) #if defined(Q_OS_WIN)

View File

@@ -23,7 +23,8 @@ HEADERS += \
$$PWD/http/responsegenerator.h \ $$PWD/http/responsegenerator.h \
$$PWD/http/server.h \ $$PWD/http/server.h \
$$PWD/http/types.h \ $$PWD/http/types.h \
$$PWD/http/responsebuilder.h $$PWD/http/responsebuilder.h \
$$PWD/unicodestrings.h
SOURCES += \ SOURCES += \
$$PWD/downloadthread.cpp \ $$PWD/downloadthread.cpp \

View File

@@ -76,7 +76,7 @@ void DNSUpdater::checkPublicIP()
m_lastIPCheckTime = QDateTime::currentDateTime(); m_lastIPCheckTime = QDateTime::currentDateTime();
QNetworkRequest request; QNetworkRequest request;
request.setUrl(QUrl("http://checkip.dyndns.org")); request.setUrl(QUrl("http://checkip.dyndns.org"));
request.setRawHeader("User-Agent", "qBittorrent/" VERSION" chris@qbittorrent.org"); request.setRawHeader("User-Agent", "qBittorrent/" VERSION);
manager->get(request); manager->get(request);
} }
@@ -123,7 +123,7 @@ void DNSUpdater::updateDNSService()
m_lastIPCheckTime = QDateTime::currentDateTime(); m_lastIPCheckTime = QDateTime::currentDateTime();
QNetworkRequest request; QNetworkRequest request;
request.setUrl(getUpdateUrl()); request.setUrl(getUpdateUrl());
request.setRawHeader("User-Agent", "qBittorrent/" VERSION" chris@qbittorrent.org"); request.setRawHeader("User-Agent", "qBittorrent/" VERSION);
manager->get(request); manager->get(request);
} }

View File

@@ -191,9 +191,10 @@ QNetworkReply* DownloadThread::downloadUrl(const QString &url, const QList<QNetw
qDebug("url is %s", qPrintable(url)); qDebug("url is %s", qPrintable(url));
const QUrl qurl = QUrl::fromEncoded(url.toUtf8()); const QUrl qurl = QUrl::fromEncoded(url.toUtf8());
QNetworkRequest request(qurl); QNetworkRequest request(qurl);
// Spoof Firefox 3.5 user agent to avoid // Spoof Firefox 38 user agent to avoid web server banning
// Web server banning request.setRawHeader("User-Agent", "Mozilla/5.0 (X11; Linux i686; rv:38.0) Gecko/20100101 Firefox/38.0");
request.setRawHeader("User-Agent", "Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5"); // Spoof HTTP Referer to allow adding torrent link from Torcache/KickAssTorrents
request.setRawHeader("Referer", request.url().toEncoded().data());
qDebug("Downloading %s...", request.url().toEncoded().data()); qDebug("Downloading %s...", request.url().toEncoded().data());
qDebug("%d cookies for this URL", m_networkManager.cookieJar()->cookiesForUrl(url).size()); qDebug("%d cookies for this URL", m_networkManager.cookieJar()->cookiesForUrl(url).size());
for (int i=0; i<m_networkManager.cookieJar()->cookiesForUrl(url).size(); ++i) { for (int i=0; i<m_networkManager.cookieJar()->cookiesForUrl(url).size(); ++i) {
@@ -277,7 +278,7 @@ QString DownloadThread::errorCodeToString(QNetworkReply::NetworkError status) {
case QNetworkReply::ProxyTimeoutError: case QNetworkReply::ProxyTimeoutError:
return tr("The connection to the proxy timed out or the proxy did not reply in time to the request sent"); return tr("The connection to the proxy timed out or the proxy did not reply in time to the request sent");
case QNetworkReply::ProxyAuthenticationRequiredError: case QNetworkReply::ProxyAuthenticationRequiredError:
return tr("The proxy requires authentication in order to honour the request but did not accept any credentials offered"); return tr("The proxy requires authentication in order to honor the request but did not accept any credentials offered");
case QNetworkReply::ContentAccessDenied: case QNetworkReply::ContentAccessDenied:
return tr("The access to the remote content was denied (401)"); return tr("The access to the remote content was denied (401)");
case QNetworkReply::ContentOperationNotPermittedError: case QNetworkReply::ContentOperationNotPermittedError:

View File

@@ -62,13 +62,15 @@
#include <winbase.h> #include <winbase.h>
#endif #endif
#if defined(Q_OS_WIN) || defined(Q_OS_OS2)
#if (QT_VERSION < QT_VERSION_CHECK(5, 0, 0)) #if (QT_VERSION < QT_VERSION_CHECK(5, 0, 0))
#ifndef DISABLE_GUI
#include <QDesktopServices> #include <QDesktopServices>
#endif
#else #else
#include <QStandardPaths> #include <QStandardPaths>
#endif #endif
#endif
using namespace libtorrent; using namespace libtorrent;
@@ -187,6 +189,27 @@ bool fsutils::forceRemove(const QString& file_path) {
return f.remove(); return f.remove();
} }
/**
* Removes directory and its content recursively.
*
*/
void fsutils::removeDirRecursive(const QString& dirName) {
QDir dir(dirName);
if (!dir.exists()) return;
Q_FOREACH(QFileInfo info, dir.entryInfoList(QDir::NoDotAndDotDot |
QDir::System |
QDir::Hidden |
QDir::AllDirs |
QDir::Files, QDir::DirsFirst)) {
if (info.isDir()) removeDirRecursive(info.absoluteFilePath());
else forceRemove(info.absoluteFilePath());
}
dir.rmdir(dirName);
}
/** /**
* Returns the size of a file. * Returns the size of a file.
* If the file is a folder, it will compute its size based on its content. * If the file is a folder, it will compute its size based on its content.
@@ -443,62 +466,76 @@ QString fsutils::QDesktopServicesCacheLocation() {
return result; return result;
} }
QString fsutils::QDesktopServicesDownloadLocation() { QString fsutils::QDesktopServicesDownloadLocation()
#if defined(Q_OS_WIN) || defined(Q_OS_OS2) {
// as long as it stays WinXP like we do the same on OS/2 #if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
// TODO: Use IKnownFolderManager to get path of FOLDERID_Downloads #if defined(Q_OS_WIN)
// instead of hardcoding "Downloads" if (QSysInfo::windowsVersion() <= QSysInfo::WV_XP) // Windows XP
// Unfortunately, this would break compatibility with WinXP return QDir(QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation)).absoluteFilePath(
#if (QT_VERSION < QT_VERSION_CHECK(5, 0, 0)) QCoreApplication::translate("fsutils", "Downloads"));
return QDir(QDesktopServices::storageLocation(QDesktopServices::DocumentsLocation)).absoluteFilePath(
QCoreApplication::translate("fsutils", "Downloads"));
#else
return QDir(QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation)).absoluteFilePath(
QCoreApplication::translate("fsutils", "Downloads"));
#endif #endif
return QStandardPaths::writableLocation(QStandardPaths::DownloadLocation);
#else
#if defined(Q_OS_OS2)
return QDir(QDesktopServices::storageLocation(QDesktopServices::DocumentsLocation)).absoluteFilePath(
QCoreApplication::translate("fsutils", "Downloads"));
#endif
#if defined(Q_OS_WIN)
// as long as it stays WinXP like we do the same on OS/2
// TODO: Use IKnownFolderManager to get path of FOLDERID_Downloads
// instead of hardcoding "Downloads"
// Unfortunately, this would break compatibility with WinXP
if (QSysInfo::windowsVersion() <= QSysInfo::WV_XP) // Windows XP
return QDir(QDesktopServices::storageLocation(QDesktopServices::DocumentsLocation)).absoluteFilePath(
QCoreApplication::translate("fsutils", "Downloads"));
else
return QDir(QDesktopServices::storageLocation(QDesktopServices::HomeLocation)).absoluteFilePath("Downloads");
#endif #endif
#if (defined(Q_OS_UNIX) && !defined(Q_OS_MAC)) #if (defined(Q_OS_UNIX) && !defined(Q_OS_MAC))
QString save_path; QString save_path;
// Default save path on Linux // Default save path on Linux
QString config_path = QString::fromLocal8Bit(qgetenv("XDG_CONFIG_HOME").constData()); QString config_path = QString::fromLocal8Bit(qgetenv("XDG_CONFIG_HOME").constData());
if (config_path.isEmpty()) if (config_path.isEmpty())
config_path = QDir::home().absoluteFilePath(".config"); config_path = QDir::home().absoluteFilePath(".config");
QString user_dirs_file = config_path + "/user-dirs.dirs"; QString user_dirs_file = config_path + "/user-dirs.dirs";
if (QFile::exists(user_dirs_file)) { if (QFile::exists(user_dirs_file)) {
QSettings settings(user_dirs_file, QSettings::IniFormat); QSettings settings(user_dirs_file, QSettings::IniFormat);
// We need to force UTF-8 encoding here since this is not // We need to force UTF-8 encoding here since this is not
// the default for Ini files. // the default for Ini files.
settings.setIniCodec("UTF-8"); settings.setIniCodec("UTF-8");
QString xdg_download_dir = settings.value("XDG_DOWNLOAD_DIR").toString(); QString xdg_download_dir = settings.value("XDG_DOWNLOAD_DIR").toString();
if (!xdg_download_dir.isEmpty()) { if (!xdg_download_dir.isEmpty()) {
// Resolve $HOME environment variables // Resolve $HOME environment variables
xdg_download_dir.replace("$HOME", QDir::homePath()); xdg_download_dir.replace("$HOME", QDir::homePath());
save_path = xdg_download_dir; save_path = xdg_download_dir;
qDebug() << Q_FUNC_INFO << "SUCCESS: Using XDG path for downloads: " << save_path; qDebug() << Q_FUNC_INFO << "SUCCESS: Using XDG path for downloads: " << save_path;
}
} }
}
// Fallback // Fallback
if (!save_path.isEmpty() && !QFile::exists(save_path)) { if (!save_path.isEmpty() && !QFile::exists(save_path)) {
QDir().mkpath(save_path); QDir().mkpath(save_path);
} }
if (save_path.isEmpty() || !QFile::exists(save_path)) { if (save_path.isEmpty() || !QFile::exists(save_path)) {
save_path = QDir::home().absoluteFilePath(QCoreApplication::translate("fsutils", "Downloads")); save_path = QDir::home().absoluteFilePath(QCoreApplication::translate("fsutils", "Downloads"));
qDebug() << Q_FUNC_INFO << "using" << save_path << "as fallback since the XDG detection did not work"; qDebug() << Q_FUNC_INFO << "using" << save_path << "as fallback since the XDG detection did not work";
} }
return save_path; return save_path;
#endif #endif
#ifdef Q_OS_MAC #if defined(Q_OS_MAC)
// TODO: How to support this on Mac OS X? // TODO: How to support this on Mac OS?
#endif #endif
// Fallback // Fallback
return QDir::home().absoluteFilePath(QCoreApplication::translate("fsutils", "Downloads")); return QDir::home().absoluteFilePath(QCoreApplication::translate("fsutils", "Downloads"));
#endif
} }
QString fsutils::searchEngineLocation() { QString fsutils::searchEngineLocation() {

View File

@@ -57,6 +57,7 @@ namespace fsutils
bool isValidTorrentFile(const QString& path); bool isValidTorrentFile(const QString& path);
bool smartRemoveEmptyFolderTree(const QString& dir_path); bool smartRemoveEmptyFolderTree(const QString& dir_path);
bool forceRemove(const QString& file_path); bool forceRemove(const QString& file_path);
void removeDirRecursive(const QString& dirName);
/* Ported from Qt4 to drop dependency on QtGui */ /* Ported from Qt4 to drop dependency on QtGui */
QString QDesktopServicesDataLocation(); QString QDesktopServicesDataLocation();

View File

@@ -79,9 +79,8 @@ RequestParser::ErrorCode RequestParser::parseHttpRequest(const QByteArray& data,
} }
// Parse HTTP request message // Parse HTTP request message
int content_length = 0;
if (m_request.headers.contains("content-length")) { if (m_request.headers.contains("content-length")) {
content_length = m_request.headers["content-length"].toInt(); int content_length = m_request.headers["content-length"].toInt();
if (content_length > static_cast<int>(m_maxContentLength)) { if (content_length > static_cast<int>(m_maxContentLength)) {
qWarning() << Q_FUNC_INFO << "bad request: message too long"; qWarning() << Q_FUNC_INFO << "bad request: message too long";
return BadRequest; return BadRequest;
@@ -331,16 +330,22 @@ bool RequestParser::parseFormData(const QByteArray& data)
bool RequestParser::parseHeaderValue(const QString& value, QStringMap& out) bool RequestParser::parseHeaderValue(const QString& value, QStringMap& out)
{ {
QStringList items = value.split(QLatin1Char(';')); int pos = value.indexOf(QLatin1Char(';'));
out[""] = items[0]; if (pos == -1) {
out[""] = value.trimmed();
for (QStringList::size_type i = 1; i < items.size(); ++i) { return true;
int pos = items[i].indexOf("=");
if (pos < 0)
return false;
out[items[i].left(pos).trimmed()] = unquoted(items[i].mid(pos + 1).trimmed());
} }
out[""] = value.left(pos).trimmed();
QRegExp rx(";\\s*([^=;\"]+)\\s*=\\s*(\"[^\"]*\"|[^\";\\s]+)\\s*");
while (rx.indexIn(value, pos) == pos) {
out[rx.cap(1).trimmed()] = unquoted(rx.cap(2));
pos += rx.cap(0).length();
}
if (pos != value.length())
return false;
return true; return true;
} }

View File

@@ -47,7 +47,8 @@ const QString HEADER_CACHE_CONTROL = "Cache-Control";
const QString CONTENT_TYPE_CSS = "text/css; charset=UTF-8"; const QString CONTENT_TYPE_CSS = "text/css; charset=UTF-8";
const QString CONTENT_TYPE_GIF = "image/gif"; const QString CONTENT_TYPE_GIF = "image/gif";
const QString CONTENT_TYPE_HTML = "text/html; charset=UTF-8"; const QString CONTENT_TYPE_HTML = "text/html; charset=UTF-8";
const QString CONTENT_TYPE_JS = "text/javascript; charset=UTF-8"; const QString CONTENT_TYPE_JS = "application/javascript; charset=UTF-8";
const QString CONTENT_TYPE_JSON = "application/json";
const QString CONTENT_TYPE_PNG = "image/png"; const QString CONTENT_TYPE_PNG = "image/png";
const QString CONTENT_TYPE_TXT = "text/plain; charset=UTF-8"; const QString CONTENT_TYPE_TXT = "text/plain; charset=UTF-8";

File diff suppressed because it is too large Load Diff

View File

@@ -41,6 +41,9 @@
#include <QUrl> #include <QUrl>
#ifndef DISABLE_GUI #ifndef DISABLE_GUI
#include <QIcon> #include <QIcon>
#if (QT_VERSION >= QT_VERSION_CHECK(5, 2, 0))
#include <QCollator>
#endif
#endif #endif
#include <libtorrent/version.hpp> #include <libtorrent/version.hpp>
@@ -64,6 +67,7 @@ namespace misc
{ {
QString toQString(const std::string &str); QString toQString(const std::string &str);
QString toQString(const char* str); QString toQString(const char* str);
QString toQString(time_t t, Qt::DateFormat f = Qt::DefaultLocaleLongDate);
QString toQStringU(const std::string &str); QString toQStringU(const std::string &str);
QString toQStringU(const char* str); QString toQStringU(const char* str);
QString toQString(const libtorrent::sha1_hash &hash); QString toQString(const libtorrent::sha1_hash &hash);
@@ -81,6 +85,8 @@ namespace misc
QPoint screenCenter(QWidget *win); QPoint screenCenter(QWidget *win);
#endif #endif
int pythonVersion(); int pythonVersion();
QString pythonExecutable();
QString pythonVersionComplete();
// return best userfriendly storage unit (B, KiB, MiB, GiB, TiB) // return best userfriendly storage unit (B, KiB, MiB, GiB, TiB)
// use Binary prefix standards from IEC 60027-2 // use Binary prefix standards from IEC 60027-2
// see http://en.wikipedia.org/wiki/Kilobyte // see http://en.wikipedia.org/wiki/Kilobyte
@@ -100,11 +106,22 @@ namespace misc
QList<int> intListfromStringList(const QStringList &l); QList<int> intListfromStringList(const QStringList &l);
QList<bool> boolListfromStringList(const QStringList &l); QList<bool> boolListfromStringList(const QStringList &l);
QString toQString(time_t t);
QString accurateDoubleToString(const double &n, const int &precision); QString accurateDoubleToString(const double &n, const int &precision);
#ifndef DISABLE_GUI #ifndef DISABLE_GUI
bool naturalSort(QString left, QString right, bool& result); bool naturalSort(const QString &left, const QString &right, bool &result);
class NaturalCompare
{
public:
NaturalCompare();
bool operator()(const QString &l, const QString &r);
bool lessThan(const QString &left, const QString &right);
#if (QT_VERSION >= QT_VERSION_CHECK(5, 2, 0))
private:
QCollator m_collator;
#endif
};
#endif #endif
// Implements constant-time comparison to protect against timing attacks // Implements constant-time comparison to protect against timing attacks
@@ -112,6 +129,11 @@ namespace misc
bool slowEquals(const QByteArray &a, const QByteArray &b); bool slowEquals(const QByteArray &a, const QByteArray &b);
void loadBencodedFile(const QString &filename, std::vector<char> &buffer, libtorrent::lazy_entry &entry, libtorrent::error_code &ec); void loadBencodedFile(const QString &filename, std::vector<char> &buffer, libtorrent::lazy_entry &entry, libtorrent::error_code &ec);
#ifndef DISABLE_GUI
void openPath(const QString& absolutePath);
void openFolderSelect(const QString& absolutePath);
#endif
void msleep(unsigned long msecs); void msleep(unsigned long msecs);
} }

View File

@@ -32,6 +32,7 @@
#include "preferences.h" #include "preferences.h"
#include "qinisettings.h" #include "qinisettings.h"
#include "logger.h"
#include <QCryptographicHash> #include <QCryptographicHash>
#include <QPair> #include <QPair>
@@ -67,12 +68,12 @@ Preferences::Preferences()
QStringList keys = settings_new->allKeys(); QStringList keys = settings_new->allKeys();
bool use_new = false; bool use_new = false;
// This means that the PC closed either due to power outage // This means that the PC closed either due to power outage
// or because the disk was full. In any case the settings weren't transfered // or because the disk was full. In any case the settings weren't transfered
// in their final position. So assume that qbittorrent_new.ini/qbittorrent_new.conf // in their final position. So assume that qbittorrent_new.ini/qbittorrent_new.conf
// contains the most recent settings. // contains the most recent settings.
if (!keys.isEmpty()) { if (!keys.isEmpty()) {
Logger::instance()->addMessage(tr("Detected unclean program exit. Using fallback file to restore settings."), Log::WARNING);
use_new = true; use_new = true;
dirty = true; dirty = true;
} }
@@ -100,7 +101,9 @@ Preferences::Preferences()
//Ensures sync to disk before we attempt to manipulate the files from save(). //Ensures sync to disk before we attempt to manipulate the files from save().
delete settings; delete settings;
#ifndef Q_OS_MAC #ifndef Q_OS_MAC
QString new_path = settings_new->fileName();
delete settings_new; delete settings_new;
fsutils::forceRemove(new_path);
if (use_new) if (use_new)
save(); save();
@@ -134,7 +137,7 @@ void Preferences::drop()
void Preferences::save() void Preferences::save()
{ {
QReadLocker locker(&lock); QWriteLocker locker(&lock);
if (!dirty) if (!dirty)
return; return;
@@ -158,11 +161,19 @@ void Preferences::save()
#ifndef Q_OS_MAC #ifndef Q_OS_MAC
settings->sync(); // Important to get error status settings->sync(); // Important to get error status
if (settings->status() == QSettings::AccessError) { QString new_path = settings->fileName();
QSettings::Status status = settings->status();
if (status != QSettings::NoError) {
if (status == QSettings::AccessError)
Logger::instance()->addMessage(tr("An access error occurred while trying to write the configuration file."), Log::CRITICAL);
else
Logger::instance()->addMessage(tr("A format error occurred while trying to write the configuration file."), Log::CRITICAL);
delete settings; delete settings;
fsutils::forceRemove(new_path);
return; return;
} }
QString new_path = settings->fileName();
delete settings; delete settings;
QString final_path = new_path; QString final_path = new_path;
int index = final_path.lastIndexOf("_new", -1, Qt::CaseInsensitive); int index = final_path.lastIndexOf("_new", -1, Qt::CaseInsensitive);
@@ -295,7 +306,7 @@ void Preferences::setMinimizeToTray(bool b)
bool Preferences::closeToTray() const bool Preferences::closeToTray() const
{ {
return value("Preferences/General/CloseToTray", false).toBool(); return value("Preferences/General/CloseToTray", true).toBool();
} }
void Preferences::setCloseToTray(bool b) void Preferences::setCloseToTray(bool b)
@@ -627,7 +638,7 @@ int Preferences::getSessionPort() const
QReadLocker locker(&lock); QReadLocker locker(&lock);
if (useRandomPort()) if (useRandomPort())
return m_randomPort; return m_randomPort;
return value("Preferences/Connection/PortRangeMin", 6881).toInt(); return value("Preferences/Connection/PortRangeMin", 8999).toInt();
} }
void Preferences::setSessionPort(int port) void Preferences::setSessionPort(int port)
@@ -659,7 +670,7 @@ void Preferences::setGlobalDownloadLimit(int limit)
int Preferences::getGlobalUploadLimit() const int Preferences::getGlobalUploadLimit() const
{ {
return value("Preferences/Connection/GlobalUPLimit", 50).toInt(); return value("Preferences/Connection/GlobalUPLimit", -1).toInt();
} }
void Preferences::setGlobalUploadLimit(int limit) void Preferences::setGlobalUploadLimit(int limit)
@@ -858,7 +869,7 @@ void Preferences::setMaxConnecsPerTorrent(int val)
int Preferences::getMaxUploads() const int Preferences::getMaxUploads() const
{ {
return value("Preferences/Bittorrent/MaxUploads", 8).toInt(); return value("Preferences/Bittorrent/MaxUploads", -1).toInt();
} }
void Preferences::setMaxUploads(int val) void Preferences::setMaxUploads(int val)
@@ -870,7 +881,7 @@ void Preferences::setMaxUploads(int val)
int Preferences::getMaxUploadsPerTorrent() const int Preferences::getMaxUploadsPerTorrent() const
{ {
return value("Preferences/Bittorrent/MaxUploadsPerTorrent", 4).toInt(); return value("Preferences/Bittorrent/MaxUploadsPerTorrent", -1).toInt();
} }
void Preferences::setMaxUploadsPerTorrent(int val) void Preferences::setMaxUploadsPerTorrent(int val)
@@ -971,6 +982,16 @@ void Preferences::setFilteringEnabled(bool enabled)
setValue("Preferences/IPFilter/Enabled", enabled); setValue("Preferences/IPFilter/Enabled", enabled);
} }
bool Preferences::isFilteringTrackerEnabled() const
{
return value("Preferences/IPFilter/FilterTracker", false).toBool();
}
void Preferences::setFilteringTrackerEnabled(bool enabled)
{
setValue("Preferences/IPFilter/FilterTracker", enabled);
}
QString Preferences::getFilter() const QString Preferences::getFilter() const
{ {
return fsutils::fromNativePath(value("Preferences/IPFilter/File").toString()); return fsutils::fromNativePath(value("Preferences/IPFilter/File").toString());
@@ -1020,7 +1041,7 @@ void Preferences::setExecutionLogEnabled(bool b)
// Queueing system // Queueing system
bool Preferences::isQueueingSystemEnabled() const bool Preferences::isQueueingSystemEnabled() const
{ {
return value("Preferences/Queueing/QueueingEnabled", false).toBool(); return value("Preferences/Queueing/QueueingEnabled", true).toBool();
} }
void Preferences::setQueueingSystemEnabled(bool enabled) void Preferences::setQueueingSystemEnabled(bool enabled)
@@ -1407,12 +1428,12 @@ void Preferences::setOutgoingPortsMax(uint val)
setValue("Preferences/Advanced/OutgoingPortsMax", val); setValue("Preferences/Advanced/OutgoingPortsMax", val);
} }
bool Preferences::ignoreLimitsOnLAN() const bool Preferences::getIgnoreLimitsOnLAN() const
{ {
return value("Preferences/Advanced/IgnoreLimitsLAN", true).toBool(); return value("Preferences/Advanced/IgnoreLimitsLAN", true).toBool();
} }
void Preferences::ignoreLimitsOnLAN(bool ignore) void Preferences::setIgnoreLimitsOnLAN(bool ignore)
{ {
setValue("Preferences/Advanced/IgnoreLimitsLAN", ignore); setValue("Preferences/Advanced/IgnoreLimitsLAN", ignore);
} }
@@ -1479,7 +1500,7 @@ void Preferences::resolvePeerHostNames(bool resolve)
int Preferences::getMaxHalfOpenConnections() const int Preferences::getMaxHalfOpenConnections() const
{ {
const int val = value("Preferences/Connection/MaxHalfOpenConnec", 50).toInt(); const int val = value("Preferences/Connection/MaxHalfOpenConnec", 20).toInt();
if (val <= 0) if (val <= 0)
return -1; return -1;
return val; return val;
@@ -1554,7 +1575,7 @@ void Preferences::enableSuperSeeding(bool enabled)
bool Preferences::announceToAllTrackers() const bool Preferences::announceToAllTrackers() const
{ {
return value("Preferences/Advanced/AnnounceToAllTrackers", false).toBool(); return value("Preferences/Advanced/AnnounceToAllTrackers", true).toBool();
} }
void Preferences::setAnnounceToAllTrackers(bool enabled) void Preferences::setAnnounceToAllTrackers(bool enabled)
@@ -1584,6 +1605,13 @@ void Preferences::setTorrentLabels(const QStringList& labels)
setValue("TransferListFilters/customLabels", labels); setValue("TransferListFilters/customLabels", labels);
} }
void Preferences::addTorrentLabelExternal(const QString &label)
{
addTorrentLabel(label);
QString toEmit = label;
emit externalLabelAdded(toEmit);
}
void Preferences::addTorrentLabel(const QString& label) void Preferences::addTorrentLabel(const QString& label)
{ {
QStringList labels = value("TransferListFilters/customLabels").toStringList(); QStringList labels = value("TransferListFilters/customLabels").toStringList();
@@ -1636,7 +1664,7 @@ namespace {
for (DWORD i = 0; i < cSubKeys; ++i) { for (DWORD i = 0; i < cSubKeys; ++i) {
cName = cMaxSubKeyLen; cName = cMaxSubKeyLen;
res = ::RegEnumKeyExW(handle, 0, lpName, &cName, NULL, NULL, NULL, NULL); res = ::RegEnumKeyExW(handle, i, lpName, &cName, NULL, NULL, NULL, NULL);
if (res == ERROR_SUCCESS) if (res == ERROR_SUCCESS)
keys.push_back(QString::fromWCharArray(lpName)); keys.push_back(QString::fromWCharArray(lpName));
} }
@@ -1750,11 +1778,12 @@ QString Preferences::getPythonPath()
return path; return path;
// Fallback: Detect python from default locations // Fallback: Detect python from default locations
QStringList supported_versions; const QStringList dirs = QDir("C:/").entryList(QStringList("Python*"), QDir::Dirs, QDir::Name | QDir::Reversed);
supported_versions << "32" << "31" << "30" << "27" << "26" << "25"; foreach (const QString &dir, dirs) {
foreach (const QString &v, supported_versions) const QString path("C:/" + dir + "/");
if (QFile::exists("C:/Python" + v + "/python.exe")) if (QFile::exists(path + "python.exe"))
return "C:/Python" + v; return path;
}
return QString(); return QString();
} }
@@ -1881,6 +1910,16 @@ void Preferences::setConfirmTorrentDeletion(bool enabled)
setValue("Preferences/Advanced/confirmTorrentDeletion", enabled); setValue("Preferences/Advanced/confirmTorrentDeletion", enabled);
} }
bool Preferences::confirmTorrentRecheck() const
{
return value("Preferences/Advanced/confirmTorrentRecheck", true).toBool();
}
void Preferences::setConfirmTorrentRecheck(bool enabled)
{
setValue("Preferences/Advanced/confirmTorrentRecheck", enabled);
}
TrayIcon::Style Preferences::trayIconStyle() const TrayIcon::Style Preferences::trayIconStyle() const
{ {
return TrayIcon::Style(value("Preferences/Advanced/TrayIconStyle", TrayIcon::NORMAL).toInt()); return TrayIcon::Style(value("Preferences/Advanced/TrayIconStyle", TrayIcon::NORMAL).toInt());
@@ -2176,36 +2215,36 @@ void Preferences::setRssOpenFolders(const QStringList &folders)
QByteArray Preferences::getRssHSplitterState() const QByteArray Preferences::getRssHSplitterState() const
{ {
#if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)) #if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
return value("rss/qt5/splitter_h").toByteArray(); return value("Rss/qt5/splitter_h").toByteArray();
#else #else
return value("rss/splitter_h").toByteArray(); return value("Rss/splitter_h").toByteArray();
#endif #endif
} }
void Preferences::setRssHSplitterState(const QByteArray &state) void Preferences::setRssHSplitterState(const QByteArray &state)
{ {
#if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)) #if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
setValue("rss/qt5/splitter_h", state); setValue("Rss/qt5/splitter_h", state);
#else #else
setValue("rss/splitter_h", state); setValue("Rss/splitter_h", state);
#endif #endif
} }
QByteArray Preferences::getRssVSplitterState() const QByteArray Preferences::getRssVSplitterState() const
{ {
#if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)) #if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
return value("rss/qt5/splitter_v").toByteArray(); return value("Rss/qt5/splitter_v").toByteArray();
#else #else
return value("rss/splitter_v").toByteArray(); return value("Rss/splitter_v").toByteArray();
#endif #endif
} }
void Preferences::setRssVSplitterState(const QByteArray &state) void Preferences::setRssVSplitterState(const QByteArray &state)
{ {
#if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)) #if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
setValue("rss/qt5/splitter_v", state); setValue("Rss/qt5/splitter_v", state);
#else #else
setValue("rss/splitter_v", state); setValue("Rss/splitter_v", state);
#endif #endif
} }

View File

@@ -113,6 +113,7 @@ private:
signals: signals:
void changed(); void changed();
void externalLabelAdded(QString&);
public slots: public slots:
void save(); void save();
@@ -282,6 +283,8 @@ public:
// IP Filter // IP Filter
bool isFilteringEnabled() const; bool isFilteringEnabled() const;
void setFilteringEnabled(bool enabled); void setFilteringEnabled(bool enabled);
bool isFilteringTrackerEnabled() const;
void setFilteringTrackerEnabled(bool enabled);
QString getFilter() const; QString getFilter() const;
void setFilter(const QString &path); void setFilter(const QString &path);
QStringList bannedIPs() const; QStringList bannedIPs() const;
@@ -365,8 +368,8 @@ public:
void setOutgoingPortsMin(uint val); void setOutgoingPortsMin(uint val);
uint outgoingPortsMax() const; uint outgoingPortsMax() const;
void setOutgoingPortsMax(uint val); void setOutgoingPortsMax(uint val);
bool ignoreLimitsOnLAN() const; bool getIgnoreLimitsOnLAN() const;
void ignoreLimitsOnLAN(bool ignore); void setIgnoreLimitsOnLAN(bool ignore);
bool includeOverheadInLimits() const; bool includeOverheadInLimits() const;
void includeOverheadInLimits(bool include); void includeOverheadInLimits(bool include);
bool trackerExchangeEnabled() const; bool trackerExchangeEnabled() const;
@@ -401,6 +404,7 @@ public:
#endif #endif
QStringList getTorrentLabels() const; QStringList getTorrentLabels() const;
void setTorrentLabels(const QStringList& labels); void setTorrentLabels(const QStringList& labels);
void addTorrentLabelExternal(const QString &label);
void addTorrentLabel(const QString& label); void addTorrentLabel(const QString& label);
void removeTorrentLabel(const QString& label); void removeTorrentLabel(const QString& label);
bool recursiveDownloadDisabled() const; bool recursiveDownloadDisabled() const;
@@ -424,6 +428,8 @@ public:
#endif #endif
bool confirmTorrentDeletion() const; bool confirmTorrentDeletion() const;
void setConfirmTorrentDeletion(bool enabled); void setConfirmTorrentDeletion(bool enabled);
bool confirmTorrentRecheck() const;
void setConfirmTorrentRecheck(bool enabled);
TrayIcon::Style trayIconStyle() const; TrayIcon::Style trayIconStyle() const;
void setTrayIconStyle(TrayIcon::Style style); void setTrayIconStyle(TrayIcon::Style style);

View File

@@ -105,10 +105,7 @@ void QAlertDispatcher::dispatch(QSharedPointer<Tag> tag,
return; return;
bool was_empty = that->alerts.empty(); bool was_empty = that->alerts.empty();
that->alerts.push_back(alert_ptr.release());
that->alerts.push_back(alert_ptr.get());
alert_ptr.release();
if (was_empty) if (was_empty)
that->alerts_condvar.wakeAll(); that->alerts_condvar.wakeAll();

View File

@@ -51,7 +51,7 @@ int FilterParserThread::parseDATFilterFile(QString filePath, libtorrent::ip_filt
QFile file(filePath); QFile file(filePath);
if (file.exists()) { if (file.exists()) {
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
std::cerr << "I/O Error: Could not open ip filer file in read mode." << std::endl; std::cerr << "I/O Error: Could not open ip filter file in read mode." << std::endl;
return ruleCount; return ruleCount;
} }
unsigned int nbLine = 0; unsigned int nbLine = 0;
@@ -137,7 +137,7 @@ int FilterParserThread::parseP2PFilterFile(QString filePath, libtorrent::ip_filt
QFile file(filePath); QFile file(filePath);
if (file.exists()) { if (file.exists()) {
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
std::cerr << "I/O Error: Could not open ip filer file in read mode." << std::endl; std::cerr << "I/O Error: Could not open ip filter file in read mode." << std::endl;
return ruleCount; return ruleCount;
} }
unsigned int nbLine = 0; unsigned int nbLine = 0;
@@ -229,7 +229,7 @@ int FilterParserThread::parseP2BFilterFile(QString filePath, libtorrent::ip_filt
QFile file(filePath); QFile file(filePath);
if (file.exists()) { if (file.exists()) {
if (!file.open(QIODevice::ReadOnly)) { if (!file.open(QIODevice::ReadOnly)) {
std::cerr << "I/O Error: Could not open ip filer file in read mode." << std::endl; std::cerr << "I/O Error: Could not open ip filter file in read mode." << std::endl;
return ruleCount; return ruleCount;
} }
QDataStream stream(&file); QDataStream stream(&file);

View File

@@ -52,6 +52,7 @@
#include "scannedfoldersmodel.h" #include "scannedfoldersmodel.h"
#include "qtracker.h" #include "qtracker.h"
#include "logger.h" #include "logger.h"
#include "unicodestrings.h"
#ifndef DISABLE_GUI #ifndef DISABLE_GUI
#include "shutdownconfirm.h" #include "shutdownconfirm.h"
#include "geoipmanager.h" #include "geoipmanager.h"
@@ -131,7 +132,7 @@ QBtSession::QBtSession()
// Construct session // Construct session
s = new session(fingerprint(peer_id.toLocal8Bit().constData(), version.at(0), version.at(1), version.at(2), version.at(3)), 0); s = new session(fingerprint(peer_id.toLocal8Bit().constData(), version.at(0), version.at(1), version.at(2), version.at(3)), 0);
//std::cout << "Peer ID: " << fingerprint(peer_id.toLocal8Bit().constData(), version.at(0), version.at(1), version.at(2), version.at(3)).to_string() << std::endl; //std::cout << "Peer ID: " << fingerprint(peer_id.toLocal8Bit().constData(), version.at(0), version.at(1), version.at(2), version.at(3)).to_string() << std::endl;
Logger::instance()->addMessage("Peer ID: "+misc::toQString(fingerprint(peer_id.toLocal8Bit().constData(), version.at(0), version.at(1), version.at(2), version.at(3)).to_string())); Logger::instance()->addMessage(tr("Peer ID: ")+misc::toQString(fingerprint(peer_id.toLocal8Bit().constData(), version.at(0), version.at(1), version.at(2), version.at(3)).to_string()));
// Set severity level of libtorrent session // Set severity level of libtorrent session
s->set_alert_mask(alert::error_notification | alert::peer_notification | alert::port_mapping_notification | alert::storage_notification | alert::tracker_notification | alert::status_notification | alert::ip_block_notification | alert::progress_notification | alert::stats_notification); s->set_alert_mask(alert::error_notification | alert::peer_notification | alert::port_mapping_notification | alert::storage_notification | alert::tracker_notification | alert::status_notification | alert::ip_block_notification | alert::progress_notification | alert::stats_notification);
@@ -414,9 +415,9 @@ void QBtSession::configureSession() {
// * Session settings // * Session settings
session_settings sessionSettings = s->settings(); session_settings sessionSettings = s->settings();
sessionSettings.user_agent = "qBittorrent " VERSION; sessionSettings.user_agent = "qBittorrent " VERSION;
//std::cout << "HTTP user agent is " << sessionSettings.user_agent << std::endl; logger->addMessage(tr("HTTP User-Agent is %1").arg(misc::toQString(sessionSettings.user_agent)));
logger->addMessage(tr("HTTP user agent is %1").arg(misc::toQString(sessionSettings.user_agent)));
sessionSettings.apply_ip_filter_to_trackers = pref->isFilteringTrackerEnabled();
sessionSettings.upnp_ignore_nonrouters = true; sessionSettings.upnp_ignore_nonrouters = true;
sessionSettings.use_dht_as_fallback = false; sessionSettings.use_dht_as_fallback = false;
// Disable support for SSL torrents for now // Disable support for SSL torrents for now
@@ -449,23 +450,17 @@ void QBtSession::configureSession() {
if (pref->isQueueingSystemEnabled()) { if (pref->isQueueingSystemEnabled()) {
int max_downloading = pref->getMaxActiveDownloads(); int max_downloading = pref->getMaxActiveDownloads();
int max_active = pref->getMaxActiveTorrents(); int max_active = pref->getMaxActiveTorrents();
if (max_downloading > -1) if (max_downloading > -1)
sessionSettings.active_downloads = max_downloading + HiddenData::getDownloadingSize(); sessionSettings.active_downloads = max_downloading + HiddenData::getDownloadingSize();
else else
sessionSettings.active_downloads = max_downloading; sessionSettings.active_downloads = max_downloading;
if (max_active > -1) {
int limit = max_active + HiddenData::getDownloadingSize(); if (max_active > -1)
sessionSettings.active_limit = limit; sessionSettings.active_limit = max_active + HiddenData::getDownloadingSize();
sessionSettings.active_tracker_limit = limit; else
sessionSettings.active_dht_limit = limit;
sessionSettings.active_lsd_limit = limit;
}
else {
sessionSettings.active_limit = max_active; sessionSettings.active_limit = max_active;
sessionSettings.active_tracker_limit = max_active;
sessionSettings.active_dht_limit = max_active;
sessionSettings.active_lsd_limit = max_active;
}
sessionSettings.active_seeds = pref->getMaxActiveUploads(); sessionSettings.active_seeds = pref->getMaxActiveUploads();
sessionSettings.dont_count_slow_torrents = pref->ignoreSlowTorrentsForQueueing(); sessionSettings.dont_count_slow_torrents = pref->ignoreSlowTorrentsForQueueing();
setQueueingEnabled(true); setQueueingEnabled(true);
@@ -473,16 +468,16 @@ void QBtSession::configureSession() {
sessionSettings.active_downloads = -1; sessionSettings.active_downloads = -1;
sessionSettings.active_seeds = -1; sessionSettings.active_seeds = -1;
sessionSettings.active_limit = -1; sessionSettings.active_limit = -1;
sessionSettings.active_tracker_limit = -1;
sessionSettings.active_dht_limit = -1;
sessionSettings.active_lsd_limit = -1;
setQueueingEnabled(false); setQueueingEnabled(false);
} }
sessionSettings.active_tracker_limit = -1;
sessionSettings.active_dht_limit = -1;
sessionSettings.active_lsd_limit = -1;
// Outgoing ports // Outgoing ports
sessionSettings.outgoing_ports = std::make_pair(pref->outgoingPortsMin(), pref->outgoingPortsMax()); sessionSettings.outgoing_ports = std::make_pair(pref->outgoingPortsMin(), pref->outgoingPortsMax());
// Ignore limits on LAN // Ignore limits on LAN
qDebug() << "Ignore limits on LAN" << pref->ignoreLimitsOnLAN(); qDebug() << "Ignore limits on LAN" << pref->getIgnoreLimitsOnLAN();
sessionSettings.ignore_limits_on_local_network = pref->ignoreLimitsOnLAN(); sessionSettings.ignore_limits_on_local_network = pref->getIgnoreLimitsOnLAN();
// Include overhead in transfer limits // Include overhead in transfer limits
sessionSettings.rate_limit_ip_overhead = pref->includeOverheadInLimits(); sessionSettings.rate_limit_ip_overhead = pref->includeOverheadInLimits();
// IP address to announce to trackers // IP address to announce to trackers
@@ -1253,9 +1248,9 @@ void QBtSession::loadTorrentTempData(QTorrentHandle &h, QString savePath, bool m
// Update file names // Update file names
const QStringList files_path = TorrentTempData::getFilesPath(hash); const QStringList files_path = TorrentTempData::getFilesPath(hash);
bool force_recheck = false;
QDir base_dir(h.save_path()); QDir base_dir(h.save_path());
if (files_path.size() == h.num_files()) { if (files_path.size() == h.num_files()) {
bool force_recheck = false;
for (int i=0; i<h.num_files(); ++i) { for (int i=0; i<h.num_files(); ++i) {
const QString &path = files_path.at(i); const QString &path = files_path.at(i);
if (!force_recheck && base_dir.exists(path)) if (!force_recheck && base_dir.exists(path))
@@ -1552,36 +1547,21 @@ void QBtSession::enableDHT(bool b) {
} }
qreal QBtSession::getRealRatio(const libtorrent::torrent_status &status) const { qreal QBtSession::getRealRatio(const libtorrent::torrent_status &status) const {
libtorrent::size_type all_time_upload = status.all_time_upload; libtorrent::size_type upload = status.all_time_upload;
libtorrent::size_type all_time_download = status.all_time_download; // special case for a seeder who lost its stats, also assume nobody will import a 99% done torrent
libtorrent::size_type total_done = status.total_done; libtorrent::size_type download = (status.all_time_download < status.total_done * 0.01) ? status.total_done : status.all_time_download;
if (all_time_download < total_done) { if (download == 0)
// We have more data on disk than we downloaded return (upload == 0) ? 0.0 : MAX_RATIO;
// either because the user imported the file
// or because of crash the download histroy was lost.
// Otherwise will get weird ratios
// eg when downloaded 1KB and uploaded 700MB of a
// 700MB torrent.
all_time_download = total_done;
}
if (all_time_download == 0) { qreal ratio = upload / (qreal) download;
if (all_time_upload == 0) Q_ASSERT(ratio >= 0.0);
return 0.0; return (ratio > MAX_RATIO) ? MAX_RATIO : ratio;
return MAX_RATIO+1;
}
qreal ratio = all_time_upload / (float) all_time_download;
Q_ASSERT(ratio >= 0.);
if (ratio > MAX_RATIO)
ratio = MAX_RATIO;
return ratio;
} }
// Called periodically // Called periodically
void QBtSession::saveTempFastResumeData() { void QBtSession::saveTempFastResumeData() {
std::vector<torrent_handle> torrents = s->get_torrents(); std::vector<torrent_handle> torrents = s->get_torrents();
std::vector<torrent_handle>::iterator torrentIT = torrents.begin(); std::vector<torrent_handle>::iterator torrentIT = torrents.begin();
std::vector<torrent_handle>::iterator torrentITend = torrents.end(); std::vector<torrent_handle>::iterator torrentITend = torrents.end();
@@ -1972,7 +1952,7 @@ void QBtSession::updateRatioTimer()
// Enable IP Filtering // Enable IP Filtering
void QBtSession::enableIPFilter(const QString &filter_path, bool force) { void QBtSession::enableIPFilter(const QString &filter_path, bool force) {
qDebug("Enabling IPFiler"); qDebug("Enabling IPFilter");
if (!filterParser) { if (!filterParser) {
filterParser = new FilterParserThread(this, s); filterParser = new FilterParserThread(this, s);
connect(filterParser.data(), SIGNAL(IPFilterParsed(int)), SLOT(handleIPFilterParsed(int))); connect(filterParser.data(), SIGNAL(IPFilterParsed(int)), SLOT(handleIPFilterParsed(int)));
@@ -2209,15 +2189,7 @@ void QBtSession::handleTorrentFinishedAlert(libtorrent::torrent_finished_alert*
qDebug("Emitting finishedTorrent() signal"); qDebug("Emitting finishedTorrent() signal");
emit finishedTorrent(h); emit finishedTorrent(h);
qDebug("Received finished alert for %s", qPrintable(h.name())); qDebug("Received finished alert for %s", qPrintable(h.name()));
#ifndef DISABLE_GUI
bool will_shutdown = (pref->shutdownWhenDownloadsComplete() ||
pref->shutdownqBTWhenDownloadsComplete() ||
pref->suspendWhenDownloadsComplete() ||
pref->hibernateWhenDownloadsComplete())
&& !hasDownloadingTorrents();
#else
bool will_shutdown = false;
#endif
// AutoRun program // AutoRun program
if (pref->isAutoRunEnabled()) if (pref->isAutoRunEnabled())
autoRunExternalProgram(h); autoRunExternalProgram(h);
@@ -2227,8 +2199,15 @@ void QBtSession::handleTorrentFinishedAlert(libtorrent::torrent_finished_alert*
// Mail notification // Mail notification
if (pref->isMailNotificationEnabled()) if (pref->isMailNotificationEnabled())
sendNotificationEmail(h); sendNotificationEmail(h);
#ifndef DISABLE_GUI #ifndef DISABLE_GUI
// Auto-Shutdown // Auto-Shutdown
bool will_shutdown = (pref->shutdownWhenDownloadsComplete() ||
pref->shutdownqBTWhenDownloadsComplete() ||
pref->suspendWhenDownloadsComplete() ||
pref->hibernateWhenDownloadsComplete())
&& !hasDownloadingTorrents();
if (will_shutdown) { if (will_shutdown) {
bool suspend = pref->suspendWhenDownloadsComplete(); bool suspend = pref->suspendWhenDownloadsComplete();
bool hibernate = pref->hibernateWhenDownloadsComplete(); bool hibernate = pref->hibernateWhenDownloadsComplete();
@@ -2584,10 +2563,10 @@ void QBtSession::handlePeerBlockedAlert(libtorrent::peer_blocked_alert* p)
reason = tr("because it has a low port.", "this peer was blocked because it has a low port."); reason = tr("because it has a low port.", "this peer was blocked because it has a low port.");
break; break;
case peer_blocked_alert::utp_disabled: case peer_blocked_alert::utp_disabled:
reason = tr("because μTP is disabled.", "this peer was blocked because μTP is disabled."); reason = trUtf8("because %1 is disabled.", "this peer was blocked because uTP is disabled.").arg(QString::fromUtf8(C_UTP)); // don't translate μTP
break; break;
case peer_blocked_alert::tcp_disabled: case peer_blocked_alert::tcp_disabled:
reason = tr("because TCP is disabled.", "this peer was blocked because TCP is disabled."); reason = tr("because %1 is disabled.", "this peer was blocked because TCP is disabled.").arg("TCP"); // don't translate TCP
break; break;
} }
@@ -2622,7 +2601,7 @@ void QBtSession::handleFastResumeRejectedAlert(libtorrent::fastresume_rejected_a
} }
void QBtSession::handleUrlSeedAlert(libtorrent::url_seed_alert* p) { void QBtSession::handleUrlSeedAlert(libtorrent::url_seed_alert* p) {
Logger::instance()->addMessage(tr("Url seed lookup failed for url: %1, message: %2").arg(misc::toQString(p->url)).arg(misc::toQStringU(p->message())), Log::CRITICAL); Logger::instance()->addMessage(tr("URL seed lookup failed for url: %1, message: %2").arg(misc::toQString(p->url)).arg(misc::toQStringU(p->message())), Log::CRITICAL);
} }
void QBtSession::handleListenSucceededAlert(libtorrent::listen_succeeded_alert *p) { void QBtSession::handleListenSucceededAlert(libtorrent::listen_succeeded_alert *p) {

View File

@@ -533,6 +533,7 @@ void QTorrentHandle::resume(const bool force) const
bool has_persistant_error = TorPersistent->hasError(torrent_hash); bool has_persistant_error = TorPersistent->hasError(torrent_hash);
TorPersistent->setErrorState(torrent_hash, false); TorPersistent->setErrorState(torrent_hash, false);
bool temp_path_enabled = Preferences::instance()->isTempPathEnabled(); bool temp_path_enabled = Preferences::instance()->isTempPathEnabled();
TorPersistent->setHasMissingFiles(torrent_hash, false);
if (has_persistant_error && temp_path_enabled) { if (has_persistant_error && temp_path_enabled) {
// Torrent was supposed to be seeding, checking again in final destination // Torrent was supposed to be seeding, checking again in final destination
qDebug("Resuming a torrent with error..."); qDebug("Resuming a torrent with error...");
@@ -732,8 +733,8 @@ void QTorrentHandle::prioritize_first_last_piece(bool b) const
{ {
if (!has_metadata()) return; if (!has_metadata()) return;
// Download first and last pieces first for all media files in the torrent // Download first and last pieces first for all media files in the torrent
const uint nbfiles = num_files(); const int nbfiles = num_files();
for (uint index = 0; index < nbfiles; ++index) { for (int index = 0; index < nbfiles; ++index) {
const QString path = filepath_at(index); const QString path = filepath_at(index);
const QString ext = fsutils::fileExtension(path); const QString ext = fsutils::fileExtension(path);
if (misc::isPreviewable(ext) && torrent_handle::file_priority(index) > 0) { if (misc::isPreviewable(ext) && torrent_handle::file_priority(index) > 0) {

View File

@@ -208,32 +208,36 @@ QIcon TorrentModelItem::getIconByState(State state) {
} }
QColor TorrentModelItem::getColorByState(State state) { QColor TorrentModelItem::getColorByState(State state) {
// Color names taken from http://cloford.com/resources/colours/500col.htm
bool dark = isDarkTheme(); bool dark = isDarkTheme();
switch (state) { switch (state) {
case STATE_DOWNLOADING: case STATE_DOWNLOADING:
case STATE_DOWNLOADING_META: case STATE_DOWNLOADING_META:
case STATE_FORCED_DL: case STATE_FORCED_DL:
return QColor(34, 139, 34); // Forest Green if (!dark)
return QColor(34, 139, 34); // Forest Green
else
return QColor(50, 205, 50); // Lime Green
case STATE_ALLOCATING: case STATE_ALLOCATING:
case STATE_STALLED_DL: case STATE_STALLED_DL:
case STATE_STALLED_UP: case STATE_STALLED_UP:
if (!dark) if (!dark)
return QColor(0, 0, 0); // Black return QColor(0, 0, 0); // Black
else else
return QColor(255, 255, 255); // White return QColor(204, 204, 204); // Gray 80
case STATE_SEEDING: case STATE_SEEDING:
case STATE_FORCED_UP: case STATE_FORCED_UP:
if (!dark) if (!dark)
return QColor(65, 105, 225); // Royal Blue return QColor(65, 105, 225); // Royal Blue
else else
return QColor(100, 149, 237); // Cornflower Blue return QColor(99, 184, 255); // Steel Blue 1
case STATE_PAUSED_DL: case STATE_PAUSED_DL:
return QColor(250, 128, 114); // Salmon return QColor(250, 128, 114); // Salmon
case STATE_PAUSED_UP: case STATE_PAUSED_UP:
if (!dark) if (!dark)
return QColor(0, 0, 139); // Dark Blue return QColor(0, 0, 139); // Dark Blue
else else
return QColor(65, 105, 225); // Royal Blue return QColor(79, 148, 205); // Steel Blue 3
case STATE_PAUSED_MISSING: case STATE_PAUSED_MISSING:
return QColor(255, 0, 0); // red return QColor(255, 0, 0); // red
case STATE_QUEUED_DL: case STATE_QUEUED_DL:
@@ -242,7 +246,10 @@ QColor TorrentModelItem::getColorByState(State state) {
case STATE_CHECKING_DL: case STATE_CHECKING_DL:
case STATE_QUEUED_CHECK: case STATE_QUEUED_CHECK:
case STATE_QUEUED_FASTCHECK: case STATE_QUEUED_FASTCHECK:
return QColor(0, 128, 128); // Teal if (!dark)
return QColor(0, 128, 128); // Teal
else
return QColor(0, 205, 205); // Cyan 3
case STATE_INVALID: case STATE_INVALID:
return QColor(255, 0, 0); // red return QColor(255, 0, 0); // red
default: default:
@@ -418,8 +425,8 @@ QVariant TorrentModel::headerData(int section, Qt::Orientation orientation,
if (orientation == Qt::Horizontal) { if (orientation == Qt::Horizontal) {
if (role == Qt::DisplayRole) { if (role == Qt::DisplayRole) {
switch(section) { switch(section) {
case TorrentModelItem::TR_NAME: return tr("Name", "i.e: torrent name");
case TorrentModelItem::TR_PRIORITY: return "#"; case TorrentModelItem::TR_PRIORITY: return "#";
case TorrentModelItem::TR_NAME: return tr("Name", "i.e: torrent name");
case TorrentModelItem::TR_SIZE: return tr("Size", "i.e: torrent size"); case TorrentModelItem::TR_SIZE: return tr("Size", "i.e: torrent size");
case TorrentModelItem::TR_PROGRESS: return tr("Done", "% Done"); case TorrentModelItem::TR_PROGRESS: return tr("Done", "% Done");
case TorrentModelItem::TR_STATUS: return tr("Status", "Torrent status (e.g. downloading, seeding, paused)"); case TorrentModelItem::TR_STATUS: return tr("Status", "Torrent status (e.g. downloading, seeding, paused)");

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