1
mirror of https://github.com/qbittorrent/qBittorrent synced 2025-10-07 09:52:18 +02:00

Compare commits

...

206 Commits

Author SHA1 Message Date
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
200 changed files with 85766 additions and 53450 deletions

9
.gitignore vendored
View File

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

View File

@@ -1,16 +1,17 @@
language:
- cpp
language: cpp
env:
# use libtorrent 0.15.10
# uncomment when Travis doesn't use Ubuntu 12.04 LTS, which has libtorrent 0.15.10 as package
#- lt_source=from_dist gui=true
#- lt_source=from_dist gui=false
# use libtorrent 0.16.X from RC_0_16 svn branch
- lt_source=from_svnRC_0_16 gui=true
- lt_source=from_svnRC_0_16 gui=false
- lt_source=from_svnRC_1_0 gui=true
- lt_source=from_svnRC_1_0 gui=false
matrix:
# Uncomment when Travis upgraded "Ubuntu 12.04 LTS" to a newer version whose repo will have a more up-to-date libtorrent package
#- lt_branch=dist gui=true
#- lt_branch=dist gui=false
- lt_branch=RC_0_16 gui=true
- lt_branch=RC_0_16 gui=false
- lt_branch=RC_1_0 gui=true
- lt_branch=RC_1_0 gui=false
global:
- secure: "OI9CUjj4lTb0HwwIZU5PbECU3hLlAL6KC8KsbwohG8/O3j5fLcnmDsK4Ad9us5cC39sS11Jcd1kDP2qRcCuST/glVNhLkcjKkiQerOfd5nQ/qL4JYfz/1mfP5mdpz9jHKzpLUIG+TXkbSTjP6VVmsb5KPT+3pKEdRFZB+Pu9+J8="
- coverity_branch: coverity_scan
branches:
except:
@@ -20,41 +21,76 @@ branches:
notifications:
email:
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:
# 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
- alias sudo="sudo "
# Using nprocs/2 sometimes may fail (gcc is killed by system), just use two threads
- alias make="colormake -j2 "
- if ! [ "$TRAVIS_BRANCH" = "$coverity_branch" ]; then dpkg-query -L ccache && export PATH="/usr/lib/ccache/:$PATH" ; fi
- alias make="colormake -j3" # Using nprocs/2 sometimes may fail (gcc is killed by system)
- 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
- 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"
- 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
- echo settings
- echo $lt_source
- echo $ltconf
# Print settings
- echo $lt_branch
- echo $gui
- echo $ltconf
- echo $qbtconf
- 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
- ccache -V && ccache --show-stats && ccache --zero-stats
install:
#- if [[ "$lt_source" == "from_dist" ]]; then sudo apt-get -qq install libtorrent-rasterbar-dev; 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_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
- 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_branch" == "dist" ]; then cd libtorrent && ./autotool.sh && ./configure $ltconf && make install && cd "$TRAVIS_BUILD_DIR" ; fi
script:
- ./bootstrap.sh
- ./configure $qbtconf && sudo make install
- if [ "$TRAVIS_BRANCH" = "$coverity_branch" ]; then exit ; fi # Skip usual build when running coverity scan
- ./bootstrap.sh && ./configure $qbtconf
- make install
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]
host = https://www.transifex.com
[qbittorrent.qbittorrent_master]
[qbittorrent.qbittorrent_v3_2_x]
file_filter = src/lang/qbittorrent_<lang>.ts
source_file = src/lang/qbittorrent_en.ts
source_lang = en

108
Changelog
View File

@@ -1,3 +1,111 @@
* 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
- 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)

View File

@@ -1,9 +1,10 @@
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
libtorrent (sometimes called libtorrent-rasterbar) by Arvid Norberg.
@@ -39,4 +40,3 @@ You can also meet me (sledgehammer_999) on IRC:
------------------------------------------
sledgehammer999 <sledgehammer999@qbittorrent.org>

60
configure vendored
View File

@@ -1390,13 +1390,13 @@ Optional Packages:
--with-geoip-database-embedded
Embed the GeoIP database in the qBittorrent
executable (please follow instructions in
src/geoip/README) (default=no)
src/gui/geoip/README) (default=no)
--with-qtsingleapplication=[system|shipped]
Use the shipped qtsingleapplication library or the
system one (default=shipped)
--with-qjson=[system|shipped]
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
(ARG=yes), from the specified location (ARG=<path>),
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
am__api_version='1.14'
am__api_version='1.15'
# Find a good install program. We prefer a C program (faster),
# 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;}
fi
if test x"${install_sh}" != xset; then
if test x"${install_sh+set}" != xset; then
case $am_aux_dir in
*\ * | *\ *)
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>
mkdir_p='$(MKDIR_P)'
# We need awk for the "check" target. The system "awk" is bad on
# some platforms.
# We need awk for the "check" target (and possibly the TAP driver). The
# system "awk" is bad on some platforms.
# Always define AMTAR for backward compatibility. Yes, it's still used
# in the wild :-( We should find a proper way to deprecate it ...
AMTAR='$${TAR-tar}'
@@ -4263,7 +4263,7 @@ fi
# Detect OS
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether OS is FreeBSD" >&5
$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 "yes" >&6; }
LIBS="-lexecinfo $LIBS"
@@ -5294,8 +5294,8 @@ $as_echo "$as_me: Boost.System LIB: $BOOST_SYSTEM_LIB" >&6;}
LIBS="$BOOST_SYSTEM_LIB $LIBS"
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to compile using libtorrent-raser 0.16.x" >&5
$as_echo_n "checking whether to compile using libtorrent-raser 0.16.x... " >&6; }
{ $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-rasterbar 0.16.x... " >&6; }
case "x$with_libtorrent_rasterbar0_16" in #(
"xno") :
{ $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"
elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \
{ { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libtorrent-rasterbar >= 1.0.0\""; } >&5
($PKG_CONFIG --exists --print-errors "libtorrent-rasterbar >= 1.0.0") 2>&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.6") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
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
else
pkg_failed=yes
@@ -5326,12 +5326,12 @@ if test -n "$libtorrent_LIBS"; then
pkg_cv_libtorrent_LIBS="$libtorrent_LIBS"
elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \
{ { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libtorrent-rasterbar >= 1.0.0\""; } >&5
($PKG_CONFIG --exists --print-errors "libtorrent-rasterbar >= 1.0.0") 2>&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.6") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
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
else
pkg_failed=yes
@@ -5352,14 +5352,14 @@ else
_pkg_short_errors_supported=no
fi
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
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
# Put the nasty error message in config.log where it belongs
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
@@ -5404,12 +5404,12 @@ if test -n "$libtorrent_CFLAGS"; then
pkg_cv_libtorrent_CFLAGS="$libtorrent_CFLAGS"
elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \
{ { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libtorrent-rasterbar >= 0.16.0\""; } >&5
($PKG_CONFIG --exists --print-errors "libtorrent-rasterbar >= 0.16.0") 2>&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.19") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
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
else
pkg_failed=yes
@@ -5421,12 +5421,12 @@ if test -n "$libtorrent_LIBS"; then
pkg_cv_libtorrent_LIBS="$libtorrent_LIBS"
elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \
{ { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libtorrent-rasterbar >= 0.16.0\""; } >&5
($PKG_CONFIG --exists --print-errors "libtorrent-rasterbar >= 0.16.0") 2>&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.19") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
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
else
pkg_failed=yes
@@ -5447,14 +5447,14 @@ else
_pkg_short_errors_supported=no
fi
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
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
# Put the nasty error message in config.log where it belongs
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
@@ -5801,15 +5801,15 @@ _ACEOF
# Original extract() function contributed by pmzqla
# $*: Strings to parse
# Set $DEFINES, $INCLUDES, $OTHER
# Set $QBT_CONF_DEFINES, $QBT_CONF_INCLUDES, $QBT_CONF_EXTRA_CFLAGS
extract() {
if [ -z "$*" ]; then
echo "Input string required"
return 1
fi
# Convert " -" to "\n" if not between quotes
string=$(echo " $*" | $SED -e 's: -:\n:g' -e 's:"\(.*\)\n\(.*\)":\"\1 -\2":g' -e "s:'\(.*\)\n\(.*\)':\'\1 -\2':g")
# Convert " -" to "\n" if not between quotes and remove possible leading white spaces
string=$(echo " $*" | $SED -e 's: -:\n:g' -e 's:"\(.*\)\n\(.*\)":\"\1 -\2":g' -e "s:'\(.*\)\n\(.*\)':\'\1 -\2':g" -e 's/^[:space:]*//')
SAVEIFS=$IFS
IFS=$(printf "\n\b")
for i in $string; do

View File

@@ -26,7 +26,7 @@ AC_ARG_WITH(libtorrent-rasterbar0.16,
AC_ARG_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])
@@ -38,7 +38,7 @@ AC_ARG_WITH(qtsingleapplication,
AC_ARG_WITH(qjson,
[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])
@@ -74,7 +74,7 @@ AC_ARG_ENABLE(qt-dbus,
# Detect OS
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])
LIBS="-lexecinfo $LIBS"],
[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])
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"],
["xno"],
[AC_MSG_RESULT([no])
PKG_CHECK_MODULES(libtorrent,
[libtorrent-rasterbar >= 1.0.0],
[libtorrent-rasterbar >= 1.0.6],
[CPPFLAGS="$libtorrent_CFLAGS $CPPFLAGS"
LIBS="$libtorrent_LIBS $LIBS"])],
["xyes"],
[AC_MSG_RESULT([yes])
PKG_CHECK_MODULES(libtorrent,
[libtorrent-rasterbar >= 0.16.0],
[libtorrent-rasterbar >= 0.16.19],
[CPPFLAGS="$libtorrent_CFLAGS $CPPFLAGS"
LIBS="$libtorrent_LIBS $LIBS"])],
[AC_MSG_RESULT([$with_libtorrent_rasterbar0_16])
@@ -251,15 +251,15 @@ AX_DEFINE_DIR([EXPAND_MANDIR], [mandir])
# Original extract() function contributed by pmzqla
# $*: Strings to parse
# Set $DEFINES, $INCLUDES, $OTHER
# Set $QBT_CONF_DEFINES, $QBT_CONF_INCLUDES, $QBT_CONF_EXTRA_CFLAGS
extract() {
if [[ -z "$*" ]]; then
echo "Input string required"
return 1
fi
# Convert " -" to "\n" if not between quotes
string=$(echo " $*" | $SED -e 's: -:\n:g' -e 's:"\(.*\)\n\(.*\)":\"\1 -\2":g' -e "s:'\(.*\)\n\(.*\)':\'\1 -\2':g")
# Convert " -" to "\n" if not between quotes and remove possible leading white spaces
string=$(echo " $*" | $SED -e 's: -:\n:g' -e 's:"\(.*\)\n\(.*\)":\"\1 -\2":g' -e "s:'\(.*\)\n\(.*\)':\'\1 -\2':g" -e 's/^[[:space:]]*//')
SAVEIFS=$IFS
IFS=$(printf "\n\b")
for i in $string; do

4
dist/mac/Info.plist vendored
View File

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

View File

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

View File

@@ -19,7 +19,7 @@ XPStyle on
!define CSIDL_APPDATA '0x1A' ;Application Data path
!define CSIDL_LOCALAPPDATA '0x1C' ;Local Application Data path
!define PROG_VERSION "3.2.0"
!define PROG_VERSION "3.2.2"
!define MUI_FINISHPAGE_RUN
!define MUI_FINISHPAGE_RUN_FUNCTION PageFinishRun
!define MUI_FINISHPAGE_RUN_TEXT $(launch_qbt)
@@ -33,7 +33,7 @@ OutFile "qbittorrent_${PROG_VERSION}_setup.exe"
;Installer Version Information
VIAddVersionKey "ProductName" "qBittorrent"
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 "FileVersion" "${PROG_VERSION}"

View File

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

View File

@@ -379,7 +379,7 @@ QString makeUsage(const QString &prg_name)
#endif
text += QLatin1String("\t-h | --help\t\t") + QObject::tr("Displays this help message") + QLatin1Char('\n');
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');
#ifndef DISABLE_GUI
text += QLatin1String("\t--no-splash\t\t") + QObject::tr("Disable splash screen") + QLatin1Char('\n');

View File

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

View File

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

View File

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

View File

@@ -191,9 +191,8 @@ QNetworkReply* DownloadThread::downloadUrl(const QString &url, const QList<QNetw
qDebug("url is %s", qPrintable(url));
const QUrl qurl = QUrl::fromEncoded(url.toUtf8());
QNetworkRequest request(qurl);
// Spoof Firefox 3.5 user agent to avoid
// Web server banning
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 Firefox 38 user agent to avoid web server banning
request.setRawHeader("User-Agent", "Mozilla/5.0 (X11; Linux i686; rv:38.0) Gecko/20100101 Firefox/38.0");
qDebug("Downloading %s...", request.url().toEncoded().data());
qDebug("%d cookies for this URL", m_networkManager.cookieJar()->cookiesForUrl(url).size());
for (int i=0; i<m_networkManager.cookieJar()->cookiesForUrl(url).size(); ++i) {

View File

@@ -187,6 +187,27 @@ bool fsutils::forceRemove(const QString& file_path) {
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.
* If the file is a folder, it will compute its size based on its content.

View File

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

View File

@@ -79,9 +79,8 @@ RequestParser::ErrorCode RequestParser::parseHttpRequest(const QByteArray& data,
}
// Parse HTTP request message
int content_length = 0;
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)) {
qWarning() << Q_FUNC_INFO << "bad request: message too long";
return BadRequest;
@@ -331,16 +330,22 @@ bool RequestParser::parseFormData(const QByteArray& data)
bool RequestParser::parseHeaderValue(const QString& value, QStringMap& out)
{
QStringList items = value.split(QLatin1Char(';'));
out[""] = items[0];
for (QStringList::size_type i = 1; i < items.size(); ++i) {
int pos = items[i].indexOf("=");
if (pos < 0)
return false;
out[items[i].left(pos).trimmed()] = unquoted(items[i].mid(pos + 1).trimmed());
int pos = value.indexOf(QLatin1Char(';'));
if (pos == -1) {
out[""] = value.trimmed();
return true;
}
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;
}

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_GIF = "image/gif";
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_TXT = "text/plain; charset=UTF-8";

View File

@@ -1,4 +1,4 @@
/*
/*
* Bittorrent Client using Qt4 and libtorrent.
* Copyright (C) 2006 Christophe Dumez
*
@@ -28,6 +28,8 @@
* Contact : chris@qbittorrent.org
*/
#include "core/unicodestrings.h"
#include "core/logger.h"
#include "misc.h"
#include <cmath>
@@ -183,9 +185,7 @@ void misc::shutdownComputer(shutDownAction action)
AppleEvent eventReply = {typeNull, NULL};
AppleEvent appleEventToSend = {typeNull, NULL};
OSStatus error = noErr;
error = AECreateDesc(typeProcessSerialNumber, &kPSNOfSystemProcess,
OSStatus error = AECreateDesc(typeProcessSerialNumber, &kPSNOfSystemProcess,
sizeof(kPSNOfSystemProcess), &targetDesc);
if (error != noErr)
@@ -264,26 +264,78 @@ QPoint misc::screenCenter(QWidget *win)
#endif
/**
* Detects the version of python by calling
* "python --version" and parsing the output.
* Detects the python version.
*/
int misc::pythonVersion()
{
static int version = -1;
if (version < 0) {
QProcess python_proc;
python_proc.start("python", QStringList() << "--version", QIODevice::ReadOnly);
if (!python_proc.waitForFinished()) return -1;
if (python_proc.exitCode() < 0) return -1;
QByteArray output = python_proc.readAllStandardOutput();
if (output.isEmpty())
output = python_proc.readAllStandardError();
const QByteArray version_str = output.split(' ').last();
qDebug() << "Python version is:" << version_str.trimmed();
if (version_str.startsWith("3."))
version = 3;
QString versionComplete = pythonVersionComplete().trimmed();
QStringList splitted = versionComplete.split('.');
if (splitted.size() > 1) {
int highVer = splitted.at(0).toInt();
if ((highVer == 2) || (highVer == 3))
version = highVer;
}
}
return version;
}
/**
* Detects the python executable by calling "python --version".
*/
QString misc::pythonExecutable()
{
static QString executable;
if (executable.isEmpty()) {
QProcess pythonProc;
#if defined(Q_OS_UNIX)
/*
* On Unix-Like Systems python2 and python3 should always exist
* http://legacy.python.org/dev/peps/pep-0394/
*/
pythonProc.start("python3", QStringList() << "--version", QIODevice::ReadOnly);
if (pythonProc.waitForFinished() && pythonProc.exitCode() == 0) {
executable = "python3";
return executable;
}
pythonProc.start("python2", QStringList() << "--version", QIODevice::ReadOnly);
if (pythonProc.waitForFinished() && pythonProc.exitCode() == 0) {
executable = "python2";
return executable;
}
#endif
// Look for "python" in Windows and in UNIX if "python2" and "python3" are
// not detected.
pythonProc.start("python", QStringList() << "--version", QIODevice::ReadOnly);
if (pythonProc.waitForFinished() && pythonProc.exitCode() == 0)
executable = "python";
else
version = 2;
Logger::instance()->addMessage(QCoreApplication::translate("misc", "Python not detected"), Log::INFO);
}
return executable;
}
/**
* Returns the complete python version
* eg 2.7.9
* Make sure to have setup python first
*/
QString misc::pythonVersionComplete() {
static QString version;
if (version.isEmpty()) {
if (pythonExecutable().isEmpty())
return version;
QProcess pythonProc;
pythonProc.start(pythonExecutable(), QStringList() << "--version", QIODevice::ReadOnly);
if (pythonProc.waitForFinished() && pythonProc.exitCode() == 0) {
QByteArray output = pythonProc.readAllStandardOutput();
if (output.isEmpty())
output = pythonProc.readAllStandardError();
const QByteArray versionStr = output.split(' ').last();
version = versionStr.trimmed();
Logger::instance()->addMessage(QCoreApplication::translate("misc", "Python version: %1").arg(version), Log::INFO);
}
}
return version;
}
@@ -298,8 +350,10 @@ QString misc::friendlyUnit(qreal val, bool is_speed)
if (val < 0)
return QCoreApplication::translate("misc", "Unknown", "Unknown (size)");
int i = 0;
while(val >= 1024. && i++<6)
while(val >= 1024. && i < 4) {
val /= 1024.;
++i;
}
QString ret;
if (i == 0)
ret = QString::number((long)val) + " " + QCoreApplication::translate("misc", units[0].source, units[0].comment);
@@ -405,7 +459,7 @@ QString misc::magnetUriToHash(const QString& magnet_uri)
QString misc::userFriendlyDuration(qlonglong seconds)
{
if (seconds < 0 || seconds >= MAX_ETA)
return QString::fromUtf8("∞");
return QString::fromUtf8(C_INFINITY);
if (seconds == 0)
return "0";
if (seconds < 60)
@@ -421,7 +475,7 @@ QString misc::userFriendlyDuration(qlonglong seconds)
hours = hours - days * 24;
if (days < 100)
return QCoreApplication::translate("misc", "%1d %2h", "e.g: 2days 10hours").arg(QString::number(days)).arg(QString::number(hours));
return QString::fromUtf8("∞");
return QString::fromUtf8(C_INFINITY);
}
QString misc::getUserIDString()
@@ -527,12 +581,14 @@ QString misc::parseHtmlLinks(const QString &raw_text)
static QRegExp reNoScheme("<a\\s+href=\"(?!http(s?))([a-zA-Z0-9\\?%=&/_\\.-:#]+)\\s*\">");
result.replace(reNoScheme, "<a href=\"http://\\1\">");
// to preserve plain text formatting
result = "<p style=\"white-space: pre-wrap;\">" + result + "</p>";
return result;
}
QString misc::toQString(time_t t)
QString misc::toQString(time_t t, Qt::DateFormat f)
{
return QDateTime::fromTime_t(t).toString(Qt::DefaultLocaleLongDate);
return QDateTime::fromTime_t(t).toString(f);
}
#ifndef DISABLE_GUI

View File

@@ -64,6 +64,7 @@ namespace misc
{
QString toQString(const std::string &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 char* str);
QString toQString(const libtorrent::sha1_hash &hash);
@@ -81,6 +82,8 @@ namespace misc
QPoint screenCenter(QWidget *win);
#endif
int pythonVersion();
QString pythonExecutable();
QString pythonVersionComplete();
// return best userfriendly storage unit (B, KiB, MiB, GiB, TiB)
// use Binary prefix standards from IEC 60027-2
// see http://en.wikipedia.org/wiki/Kilobyte
@@ -100,7 +103,6 @@ namespace misc
QList<int> intListfromStringList(const QStringList &l);
QList<bool> boolListfromStringList(const QStringList &l);
QString toQString(time_t t);
QString accurateDoubleToString(const double &n, const int &precision);
#ifndef DISABLE_GUI

View File

@@ -295,7 +295,7 @@ void Preferences::setMinimizeToTray(bool b)
bool Preferences::closeToTray() const
{
return value("Preferences/General/CloseToTray", false).toBool();
return value("Preferences/General/CloseToTray", true).toBool();
}
void Preferences::setCloseToTray(bool b)
@@ -627,7 +627,7 @@ int Preferences::getSessionPort() const
QReadLocker locker(&lock);
if (useRandomPort())
return m_randomPort;
return value("Preferences/Connection/PortRangeMin", 6881).toInt();
return value("Preferences/Connection/PortRangeMin", 8999).toInt();
}
void Preferences::setSessionPort(int port)
@@ -659,7 +659,7 @@ void Preferences::setGlobalDownloadLimit(int limit)
int Preferences::getGlobalUploadLimit() const
{
return value("Preferences/Connection/GlobalUPLimit", 50).toInt();
return value("Preferences/Connection/GlobalUPLimit", -1).toInt();
}
void Preferences::setGlobalUploadLimit(int limit)
@@ -858,7 +858,7 @@ void Preferences::setMaxConnecsPerTorrent(int val)
int Preferences::getMaxUploads() const
{
return value("Preferences/Bittorrent/MaxUploads", 8).toInt();
return value("Preferences/Bittorrent/MaxUploads", -1).toInt();
}
void Preferences::setMaxUploads(int val)
@@ -870,7 +870,7 @@ void Preferences::setMaxUploads(int val)
int Preferences::getMaxUploadsPerTorrent() const
{
return value("Preferences/Bittorrent/MaxUploadsPerTorrent", 4).toInt();
return value("Preferences/Bittorrent/MaxUploadsPerTorrent", -1).toInt();
}
void Preferences::setMaxUploadsPerTorrent(int val)
@@ -971,6 +971,16 @@ void Preferences::setFilteringEnabled(bool 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
{
return fsutils::fromNativePath(value("Preferences/IPFilter/File").toString());
@@ -1020,7 +1030,7 @@ void Preferences::setExecutionLogEnabled(bool b)
// Queueing system
bool Preferences::isQueueingSystemEnabled() const
{
return value("Preferences/Queueing/QueueingEnabled", false).toBool();
return value("Preferences/Queueing/QueueingEnabled", true).toBool();
}
void Preferences::setQueueingSystemEnabled(bool enabled)
@@ -1479,7 +1489,7 @@ void Preferences::resolvePeerHostNames(bool resolve)
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)
return -1;
return val;
@@ -1554,7 +1564,7 @@ void Preferences::enableSuperSeeding(bool enabled)
bool Preferences::announceToAllTrackers() const
{
return value("Preferences/Advanced/AnnounceToAllTrackers", false).toBool();
return value("Preferences/Advanced/AnnounceToAllTrackers", true).toBool();
}
void Preferences::setAnnounceToAllTrackers(bool enabled)
@@ -1636,7 +1646,7 @@ namespace {
for (DWORD i = 0; i < cSubKeys; ++i) {
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)
keys.push_back(QString::fromWCharArray(lpName));
}
@@ -1750,11 +1760,12 @@ QString Preferences::getPythonPath()
return path;
// Fallback: Detect python from default locations
QStringList supported_versions;
supported_versions << "32" << "31" << "30" << "27" << "26" << "25";
foreach (const QString &v, supported_versions)
if (QFile::exists("C:/Python" + v + "/python.exe"))
return "C:/Python" + v;
const QStringList dirs = QDir("C:/").entryList(QStringList("Python*"), QDir::Dirs, QDir::Name | QDir::Reversed);
foreach (const QString &dir, dirs) {
const QString path("C:/" + dir + "/");
if (QFile::exists(path + "python.exe"))
return path;
}
return QString();
}
@@ -1881,6 +1892,16 @@ void Preferences::setConfirmTorrentDeletion(bool 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
{
return TrayIcon::Style(value("Preferences/Advanced/TrayIconStyle", TrayIcon::NORMAL).toInt());

View File

@@ -282,6 +282,8 @@ public:
// IP Filter
bool isFilteringEnabled() const;
void setFilteringEnabled(bool enabled);
bool isFilteringTrackerEnabled() const;
void setFilteringTrackerEnabled(bool enabled);
QString getFilter() const;
void setFilter(const QString &path);
QStringList bannedIPs() const;
@@ -424,6 +426,8 @@ public:
#endif
bool confirmTorrentDeletion() const;
void setConfirmTorrentDeletion(bool enabled);
bool confirmTorrentRecheck() const;
void setConfirmTorrentRecheck(bool enabled);
TrayIcon::Style trayIconStyle() const;
void setTrayIconStyle(TrayIcon::Style style);

View File

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

View File

@@ -131,7 +131,7 @@ QBtSession::QBtSession()
// Construct session
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;
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
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 +414,9 @@ void QBtSession::configureSession() {
// * Session settings
session_settings sessionSettings = s->settings();
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.use_dht_as_fallback = false;
// Disable support for SSL torrents for now
@@ -1253,9 +1253,9 @@ void QBtSession::loadTorrentTempData(QTorrentHandle &h, QString savePath, bool m
// Update file names
const QStringList files_path = TorrentTempData::getFilesPath(hash);
bool force_recheck = false;
QDir base_dir(h.save_path());
if (files_path.size() == h.num_files()) {
bool force_recheck = false;
for (int i=0; i<h.num_files(); ++i) {
const QString &path = files_path.at(i);
if (!force_recheck && base_dir.exists(path))
@@ -1552,36 +1552,21 @@ void QBtSession::enableDHT(bool b) {
}
qreal QBtSession::getRealRatio(const libtorrent::torrent_status &status) const {
libtorrent::size_type all_time_upload = status.all_time_upload;
libtorrent::size_type all_time_download = status.all_time_download;
libtorrent::size_type total_done = status.total_done;
libtorrent::size_type upload = status.all_time_upload;
// special case for a seeder who lost its stats, also assume nobody will import a 99% done torrent
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) {
// We have more data on disk than we downloaded
// 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 (download == 0)
return (upload == 0) ? 0.0 : MAX_RATIO;
if (all_time_download == 0) {
if (all_time_upload == 0)
return 0.0;
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;
qreal ratio = upload / (qreal) download;
Q_ASSERT(ratio >= 0.0);
return (ratio > MAX_RATIO) ? MAX_RATIO : ratio;
}
// Called periodically
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 torrentITend = torrents.end();
@@ -2209,15 +2194,7 @@ void QBtSession::handleTorrentFinishedAlert(libtorrent::torrent_finished_alert*
qDebug("Emitting finishedTorrent() signal");
emit finishedTorrent(h);
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
if (pref->isAutoRunEnabled())
autoRunExternalProgram(h);
@@ -2227,8 +2204,15 @@ void QBtSession::handleTorrentFinishedAlert(libtorrent::torrent_finished_alert*
// Mail notification
if (pref->isMailNotificationEnabled())
sendNotificationEmail(h);
#ifndef DISABLE_GUI
// Auto-Shutdown
bool will_shutdown = (pref->shutdownWhenDownloadsComplete() ||
pref->shutdownqBTWhenDownloadsComplete() ||
pref->suspendWhenDownloadsComplete() ||
pref->hibernateWhenDownloadsComplete())
&& !hasDownloadingTorrents();
if (will_shutdown) {
bool suspend = pref->suspendWhenDownloadsComplete();
bool hibernate = pref->hibernateWhenDownloadsComplete();
@@ -2622,7 +2606,7 @@ void QBtSession::handleFastResumeRejectedAlert(libtorrent::fastresume_rejected_a
}
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) {

View File

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

View File

@@ -418,8 +418,8 @@ QVariant TorrentModel::headerData(int section, Qt::Orientation orientation,
if (orientation == Qt::Horizontal) {
if (role == Qt::DisplayRole) {
switch(section) {
case TorrentModelItem::TR_NAME: return tr("Name", "i.e: torrent name");
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_PROGRESS: return tr("Done", "% Done");
case TorrentModelItem::TR_STATUS: return tr("Status", "Torrent status (e.g. downloading, seeding, paused)");

View File

@@ -54,7 +54,7 @@ class TorrentModelItem : public QObject {
public:
enum State {STATE_DOWNLOADING, STATE_DOWNLOADING_META, STATE_ALLOCATING, STATE_STALLED_DL, STATE_SEEDING, STATE_STALLED_UP, STATE_QUEUED_DL, STATE_QUEUED_UP, STATE_CHECKING_UP, STATE_CHECKING_DL, STATE_QUEUED_CHECK, STATE_QUEUED_FASTCHECK, STATE_PAUSED_DL, STATE_PAUSED_UP, STATE_PAUSED_MISSING, STATE_FORCED_DL, STATE_FORCED_UP, STATE_INVALID};
enum Column {TR_NAME, TR_PRIORITY, TR_SIZE, TR_TOTAL_SIZE, TR_PROGRESS, TR_STATUS, TR_SEEDS, TR_PEERS, TR_DLSPEED, TR_UPSPEED, TR_ETA, TR_RATIO, TR_LABEL, TR_ADD_DATE, TR_SEED_DATE, TR_TRACKER, TR_DLLIMIT, TR_UPLIMIT, TR_AMOUNT_DOWNLOADED, TR_AMOUNT_UPLOADED, TR_AMOUNT_LEFT, TR_TIME_ELAPSED, TR_SAVE_PATH, TR_COMPLETED, TR_RATIO_LIMIT, TR_SEEN_COMPLETE_DATE, TR_LAST_ACTIVITY, TR_AMOUNT_DOWNLOADED_SESSION, TR_AMOUNT_UPLOADED_SESSION, NB_COLUMNS};
enum Column {TR_PRIORITY, TR_NAME, TR_SIZE, TR_TOTAL_SIZE, TR_PROGRESS, TR_STATUS, TR_SEEDS, TR_PEERS, TR_DLSPEED, TR_UPSPEED, TR_ETA, TR_RATIO, TR_LABEL, TR_ADD_DATE, TR_SEED_DATE, TR_TRACKER, TR_DLLIMIT, TR_UPLIMIT, TR_AMOUNT_DOWNLOADED, TR_AMOUNT_UPLOADED, TR_AMOUNT_DOWNLOADED_SESSION, TR_AMOUNT_UPLOADED_SESSION, TR_AMOUNT_LEFT, TR_TIME_ELAPSED, TR_SAVE_PATH, TR_COMPLETED, TR_RATIO_LIMIT, TR_SEEN_COMPLETE_DATE, TR_LAST_ACTIVITY, NB_COLUMNS};
public:
TorrentModelItem(const QTorrentHandle& h);

84
src/core/unicodestrings.h Normal file
View File

@@ -0,0 +1,84 @@
/*
* Bittorrent Client using Qt and libtorrent.
* Copyright (C) 2015 Mike Tzou
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* In addition, as a special exception, the copyright holders give permission to
* link this program with the OpenSSL project's "OpenSSL" library (or with
* modified versions of it that use the same license as the "OpenSSL" library),
* and distribute the linked executables. You must obey the GNU General Public
* License in all respects for all of the code used other than "OpenSSL". If you
* modify file(s), you may extend this exception to your version of the file(s),
* but you are not obligated to do so. If you do not wish to do so, delete this
* exception statement from your version.
*/
// This file must be encoded in "UTF-8 with BOM"
#ifdef _MSC_VER
#pragma execution_character_set("utf-8")
#endif
// Because of the poor handling of UTF-8 characters in MSVC (emits warning C4819),
// we put all problematic UTF-8 chars/strings in this file.
// See issue #3059 for more details (https://github.com/qbittorrent/qBittorrent/issues/3059).
const char C_INFINITY[] = "∞";
const char C_UP[] = "▲";
const char C_DOWN[] = "▼";
const char C_COPYRIGHT[] = "©";
const char C_LOCALE_ENGLISH[] = "English";
const char C_LOCALE_ENGLISH_AUSTRALIA[] = "English(Australia)";
const char C_LOCALE_ENGLISH_UNITEDKINGDOM[] = "English(United Kingdom)";
const char C_LOCALE_FRENCH[] = "Français";
const char C_LOCALE_GERMAN[] = "Deutsch";
const char C_LOCALE_HUNGARIAN[] = "Magyar";
const char C_LOCALE_INDONESIAN[] = "Bahasa Indonesia";
const char C_LOCALE_ITALIAN[] = "Italiano";
const char C_LOCALE_DUTCH[] = "Nederlands";
const char C_LOCALE_SPANISH[] = "Español";
const char C_LOCALE_CATALAN[] = "Català";
const char C_LOCALE_GALICIAN[] = "Galego";
const char C_LOCALE_PORTUGUESE[] = "Português";
const char C_LOCALE_PORTUGUESE_BRAZIL[] = "Português brasileiro";
const char C_LOCALE_POLISH[] = "Polski";
const char C_LOCALE_LITHUANIAN[] = "Lietuvių";
const char C_LOCALE_CZECH[] = "Čeština";
const char C_LOCALE_SLOVAK[] = "Slovenčina";
const char C_LOCALE_SLOVENIAN[] = "Slovenščina";
const char C_LOCALE_SERBIAN[] = "Српски";
const char C_LOCALE_CROATIAN[] = "Hrvatski";
const char C_LOCALE_ARMENIAN[] = "Հայերեն";
const char C_LOCALE_ROMANIAN[] = "Română";
const char C_LOCALE_TURKISH[] = "Türkçe";
const char C_LOCALE_GREEK[] = "Ελληνικά";
const char C_LOCALE_SWEDISH[] = "Svenska";
const char C_LOCALE_FINNISH[] = "Suomi";
const char C_LOCALE_NORWEGIAN[] = "Norsk";
const char C_LOCALE_DANISH[] = "Dansk";
const char C_LOCALE_BULGARIAN[] = "Български";
const char C_LOCALE_UKRAINIAN[] = "Українська";
const char C_LOCALE_RUSSIAN[] = "Русский";
const char C_LOCALE_JAPANESE[] = "日本語";
const char C_LOCALE_HEBREW[] = "עברית";
const char C_LOCALE_HINDI[] = "हिन्दी, हिंदी";
const char C_LOCALE_ARABIC[] = "عربي";
const char C_LOCALE_GEORGIAN[] = "ქართული";
const char C_LOCALE_BYELORUSSIAN[] = "Беларуская";
const char C_LOCALE_BASQUE[] = "Euskara";
const char C_LOCALE_VIETNAMESE[] = "tiếng Việt";
const char C_LOCALE_CHINESE_TRADITIONAL_TW[] = "正體中文 (臺灣)";
const char C_LOCALE_CHINESE_TRADITIONAL_HK[] = "繁體中文 (香港)";
const char C_LOCALE_CHINESE_SIMPLIFIED[] = "简体中文";
const char C_LOCALE_KOREAN[] = "한글";

View File

@@ -1,6 +1,8 @@
<!DOCTYPE RCC><RCC version="1.0">
<qresource>
<file>gpl.html</file>
<file>thanks.html</file>
<file>translators.html</file>
</qresource>
</RCC>

View File

@@ -89,7 +89,7 @@
<string/>
</property>
<property name="pixmap">
<pixmap resource="icons.qrc">:/icons/skin/mascot.png</pixmap>
<pixmap resource="../icons.qrc">:/icons/skin/mascot.png</pixmap>
</property>
</widget>
</item>
@@ -369,7 +369,11 @@
<number>6</number>
</property>
<item>
<widget class="QTextBrowser" name="te_thanks"/>
<widget class="QTextBrowser" name="te_thanks">
<property name="openExternalLinks">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
@@ -517,7 +521,7 @@
</widget>
<layoutdefault spacing="6" margin="11"/>
<resources>
<include location="icons.qrc"/>
<include location="../icons.qrc"/>
</resources>
<connections/>
</ui>

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