Compare commits

..

51 Commits

Author SHA1 Message Date
sledgehammer999
258efe261d Bump to 3.3.12 2017-04-06 19:51:12 +03:00
sledgehammer999
59abbab9b9 Update Changelog. 2017-04-06 19:48:23 +03:00
Chocobo1
7cc32cbe97 Bump _WIN32_IE in cmake build 2017-04-06 19:47:21 +03:00
Chocobo1
5783f7bafe Fix NTDDI_VERSION define
Fixup of 5958585e3a
2017-04-06 19:47:08 +03:00
sledgehammer999
0e64e6887a Bump API_VERSION and API_VERSION_MIN to 13. 2017-04-06 02:04:31 +03:00
sledgehammer999
c25cb29e61 Sync translations of .desktop file from Transifex. 2017-04-06 02:04:29 +03:00
sledgehammer999
bca9b60db8 Revert "Refactor: initialize class variable directly"
This reverts commit b4bca7cfb7.
2017-04-06 00:43:03 +03:00
Chocobo1
1ec122c4ab Set cookie SID value to empty on logout
Set cookie SID expiration date to 1 day in the past on logout
2017-04-05 18:40:53 +03:00
Chocobo1
562dd41ab2 Fire up the timer to clean inactive sessions 2017-04-05 18:40:52 +03:00
Chocobo1
b4bca7cfb7 Refactor: initialize class variable directly 2017-04-05 18:40:51 +03:00
Chocobo1
b985bb43fa Refactor: reorder headers 2017-04-05 18:40:50 +03:00
Chocobo1
bf8a438a6f Set HttpOnly attribute to SID cookie 2017-04-05 18:40:48 +03:00
vlakoff
7cd9b6f750 Update French translation for the installer 2017-04-05 18:40:41 +03:00
sledgehammer999
d487c69dcc Fix running the uninstaller if the user chose a different path in the installer. Closes #6080. 2017-04-05 03:05:46 +03:00
sledgehammer999
444c2bdf19 Revert "Use Perl-compatible regexes for RSS rules. Closes #6367."
This reverts commit 8d11af94f2.
2017-04-04 03:25:27 +03:00
sledgehammer999
f86064e322 Revert "Cache rule regular expressions for performance"
This reverts commit bacef1ca24.
2017-04-04 03:25:24 +03:00
sledgehammer999
6675544c23 Revert "Change named of getter function."
This reverts commit 20b30dd4b5.
2017-04-04 03:25:14 +03:00
FranciscoPombal
10205ca67e fixed "remaining" column in WebUI
the key had the wrong name. In the js code, the expected key is "amount_left" and not "remaining".
2017-04-04 02:04:36 +03:00
sledgehammer999
2dfed3c41e Better 64-bit handling in the installer. 2017-04-04 02:04:35 +03:00
Eugene Shalygin
db29a61fbf cmake: fix OSX bundle creation 2017-04-04 02:04:33 +03:00
Chocobo1
3497c5307c Fix cancel "Set location" causes files move to installation dir.
Closes #6568.
2017-04-04 02:04:32 +03:00
Chocobo1
565f263ecb Add log message 2017-04-04 02:04:31 +03:00
Chocobo1
c94a61f434 code formatting 2017-04-04 02:04:30 +03:00
Chocobo1
d390d941eb Add NTDDI_VERSION define 2017-04-04 02:04:29 +03:00
Chocobo1
f1de249c9e NSIS: set exit code to 0 on install/uninstall success
Closes #6129.
2017-04-04 02:04:28 +03:00
Chocobo1
f85768412c NSIS: trim whitespaces 2017-04-04 02:04:26 +03:00
regs01
5a28e8c5e9 Update options.nsi
dpi-aware installer
2017-04-04 02:04:25 +03:00
epicgirl1998
5b72595547 Remove extra space
fixes https://github.com/qbittorrent/qBittorrent/issues/6523
2017-04-04 02:04:24 +03:00
sheeit
a363ed6d7c Fixed Markdown formatting for headers 2017-04-04 02:04:23 +03:00
sledgehammer999
077469d5a0 Indicate bitness in stackstrace and about dialog. Closes #6172. 2017-04-04 01:54:37 +03:00
sledgehammer999
66df7c47b2 Some improvements in travis.yml for macOS. Closes #6089. 2017-04-04 01:54:18 +03:00
sledgehammer999
20b30dd4b5 Change named of getter function. 2017-04-04 01:54:17 +03:00
Tim Delaney
bacef1ca24 Cache rule regular expressions for performance
--HG--
branch : magao-dev
2017-04-04 01:54:16 +03:00
Tim Delaney
8d11af94f2 Use Perl-compatible regexes for RSS rules. Closes #6367.
--HG--
branch : magao-dev
2017-04-04 01:52:02 +03:00
sledgehammer999
02c96fa5e2 Change the user-agent format in the session.cpp too. 2017-04-04 01:48:43 +03:00
Chocobo1
65b491fed0 Add comment 2017-04-04 01:48:41 +03:00
Chocobo1
f0eab3f085 Follow http user-agent format
Add version variable without the starting "v"
2017-04-04 01:48:27 +03:00
Chocobo1
21212fdfe5 Prepend QBT_ for preprocessor variables 2017-04-04 01:48:26 +03:00
FranciscoPombal
f39465c25a Implement statistics window in web UI 2017-04-04 01:48:25 +03:00
Vladimir Golovnev (Glassez)
a3eaee7e7e Remove exception-suppress macros
Remove SAFE_* macros from TorrentHandle class.
These macros using seems to be unneeded.
2017-04-04 01:48:03 +03:00
sledgehammer999
1e28bbb47e Revert "Set default locale". Closes #6436 and #6459.
This reverts commit 75ef6356d3.
2017-04-04 01:48:02 +03:00
sledgehammer999
c5b98339ae Update stuff in appdata.xml and run 'appstream-utl upgrade' on it. 2017-04-04 01:48:01 +03:00
sledgehammer999
edb1b727c6 Add keywords to the .desktop file. 2017-04-04 01:47:38 +03:00
Chocobo1
78aeb5eee7 Capitalize title strings
Remove DISCARDABLE keyword which is ignored on 32-bit windows
2017-04-04 01:47:37 +03:00
Chocobo1
9dd93c3d17 Embed manifest when compiling with MSVC
Update manifest
2017-04-04 01:47:25 +03:00
buinsky
2d64405eb8 Improve performance of updating 'progress' column 2017-03-05 18:47:50 +02:00
Chocobo1
dff560d8c2 Workaround thread_local not supported on OSX
Drop back to xcode7.3 on TravisCI
2017-03-05 18:47:49 +02:00
Chocobo1
b3c973612f Fix compile error: ‘escape’ is not a member of ‘Qt’ 2017-03-05 18:47:48 +02:00
Chocobo1
3480d3d10c Fix incomplete type compile error with Qt4 2017-03-05 18:47:47 +02:00
Chocobo1
f45d21d3a2 Enable thread_local support in TravisCI 2017-03-05 18:47:46 +02:00
Chocobo1
8dcb792ac0 Replace rand() by a true uniform distribution generator 2017-03-05 18:47:37 +02:00
105 changed files with 856 additions and 327 deletions

View File

@@ -89,10 +89,6 @@ before_install:
# setup virtual display for after_success target
if [ "$gui" = true ]; then 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 ;
fi
- |
if [ "$TRAVIS_OS_NAME" = "osx" ]; then
qbtconf="$qbtconf --disable-qt-dbus" ;
fi
# print settings
- echo $lt_branch
@@ -182,7 +178,11 @@ script:
after_success:
- if [ "$gui" = true ]; then qbt_exe="qbittorrent" ; else qbt_exe="qbittorrent-nox" ; fi
- if [ "$TRAVIS_OS_NAME" = "linux" ]; then cd "$qbt_path/bin" ; fi
- if [ "$TRAVIS_OS_NAME" = "osx" ]; then cd "$TRAVIS_BUILD_DIR/src/" && macdeployqt "$qbt_exe.app" && cd "$qbt_exe.app/Contents/MacOS" ; fi
- |
if [ "$TRAVIS_OS_NAME" = "osx" ]; then
macdeployqt "$TRAVIS_BUILD_DIR/src/$qbt_exe.app" ;
cd "$TRAVIS_BUILD_DIR/src/$qbt_exe.app/Contents/MacOS" ;
fi
- ./$qbt_exe --version
after_script:

View File

@@ -17,15 +17,17 @@ endif()
set(PROJECT_VERSION "${PROJECT_VERSION}${VER_STATUS}")
add_definitions(-DVERSION_MAJOR=${VER_MAJOR})
add_definitions(-DVERSION_MINOR=${VER_MINOR})
add_definitions(-DVERSION_BUGFIX=${VER_BUGFIX})
add_definitions(-DVERSION_BUILD=${VER_BUILD})
add_definitions(-DQBT_VERSION_MAJOR=${VER_MAJOR})
add_definitions(-DQBT_VERSION_MINOR=${VER_MINOR})
add_definitions(-DQBT_VERSION_BUGFIX=${VER_BUGFIX})
add_definitions(-DQBT_VERSION_BUILD=${VER_BUILD})
# os2 {
# DEFINES += VERSION=\'\"v$${PROJECT_VERSION}\"\'
# DEFINES += DQBT_VERSION=\'\"v$${PROJECT_VERSION}\"\'
# DEFINES += DQBT_VERSION_2=\'\"$${PROJECT_VERSION}\"\'
# } else {
add_definitions(-DVERSION="v${PROJECT_VERSION}")
add_definitions(-DQBT_VERSION="v${PROJECT_VERSION}")
add_definitions(-DQBT_VERSION_2="${PROJECT_VERSION}")
# }
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Og")

View File

@@ -138,14 +138,14 @@ However, there are cases where curly braces for single statement if blocks **sho
Generally it will depend on the particular piece of code and would be determined on how readable that piece of code is. **If in doubt** always use braces if one of the above exceptions applies.
### 3. Indentation###
### 3. Indentation ###
4 spaces.
### 4. File encoding and line endings.###
### 4. File encoding and line endings. ###
UTF-8 and Unix-like line ending (LF). Unless some platform specific files need other encodings/line endings.
### 5. Initialization lists.###
### 5. Initialization lists. ###
Initialization lists should be vertical. This will allow for more easily readable diffs. The initialization colon should be indented and in its own line along with first argument. The rest of the arguments should be indented too and have the comma prepended.
```c++
myClass::myClass(int a, int b, int c, int d)
@@ -158,7 +158,7 @@ myClass::myClass(int a, int b, int c, int d)
}
```
### 6. Enums.###
### 6. Enums. ###
Enums should be vertical. This will allow for more easily readable diffs. The members should be indented.
```c++
enum Days
@@ -173,7 +173,7 @@ enum Days
};
```
### 7. Names.###
### 7. Names. ###
All names should be camelCased.
#### a. Type names and namespaces ####
@@ -207,7 +207,7 @@ class MyClass
}
```
### 8. Header inclusion order.###
### 8. Header inclusion order. ###
The headers should be placed in the following order:
1. Module header (in .cpp)
2. System/Qt/Boost etc. headers (splitted in subcategories if you have many).
@@ -240,7 +240,7 @@ Example:
```
### 9. Misc.###
### 9. Misc. ###
* Line breaks for long lines with operation:
@@ -304,5 +304,5 @@ for (int a = 0; a < b; ++b) {
* Method definitions aren't allowed in header files
###10. Not covered above###
If something isn't covered above, just follow the same style the file you are editing has. If that particular detail isn't present in the file you are editing, then use whatever the rest of the project uses.
### 10. Not covered above ###
If something isn't covered above, just follow the same style the file you are editing has. If that particular detail isn't present in the file you are editing, then use whatever the rest of the project uses.

View File

@@ -1,3 +1,27 @@
* Thu Apr 06 2017 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v3.3.12
- FEATURE: Indicate bitness in stackstrace and about dialog. Closes #6172. (sledgehammer999)
- BUGFIX: Fix incomplete type compile error with Qt4 (Chocobo1)
- BUGFIX: Fix compile error: escape is not a member of Qt (Chocobo1)
- BUGFIX: Use system locale to format dates/time/etc (sledgehammer999)
- BUGFIX: Follow http user-agent format (Chocobo1)
- BUGFIX: Fix cancel "Set location" causes files move to installation dir. (Chocobo1)
- WEBUI: Improve performance of updating 'progress' column (buinsky)
- WEBUI: Implement statistics window in web UI (FranciscoPombal)
- WEBUI: fixed "remaining" column in WebUI (FranciscoPombal)
- WEBUI: Set HttpOnly attribute to SID cookie (Chocobo1)
- WEBUI: Fire up the timer to clean inactive sessions (Chocobo1)
- WEBUI: Set cookie SID value to empty on logout (Chocobo1)
- WINDOWS: Make the installer DPI aware (regs01)
- WINDOWS: Set exit code to 0 on install/uninstall success. Fixes problem with silent installations. (Chocobo1)
- WINDOWS: The 64-bit installer refuses to install on 32-bit systems. (sledgehammer999)
- WINDOWS: The 64-bit installer uses the correct "Program Files" now. Detection will not work if you install on top of previous installer. (sledgehammer999)
- WINDOWS: Fix running the uninstaller if the user chose a different path in the installer. Closes #6080. (sledgehammer999)
- LINUX: Add keywords to the .desktop file. (sledgehammer999)
- LINUX: Update stuff in appdata.xml and run 'appstream-utl upgrade' on it. (sledgehammer999)
- OTHER: Replace rand() by a true uniform distribution generator (Chocobo1)
- OTHER: Change our user-agent format as indicated earlier in the news section (Chocobo1)
- OTHER: cmake: fix OSX bundle creation (evsh)
* Fri Mar 03 2017 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v3.3.11
- FEATURE: Always show progress and remaining bytes for unselected files. (sledgehammer999)
- FEATURE: Allow to change priority for unselected files through the combobox like it is done via the context menu. (sledgehammer999)

View File

@@ -3,7 +3,7 @@
# We want to link with static version of
# libtorrent
set(LibtorrentRasterbar_USE_STATIC_LIBS True)
set(LibtorrentRasterbar_CUSTOM_DEFINITIONS
set(LibtorrentRasterbar_CUSTOM_DEFINITIONS
-DBOOST_ALL_NO_LIB -DBOOST_ASIO_HASH_MAP_BUCKETS=1021
-DBOOST_ASIO_SEPARATE_COMPILATION
-DBOOST_EXCEPTION_DISABLE
@@ -17,8 +17,9 @@ add_definitions(-DUNICODE
-DWIN32
-D_WIN32
-DWIN32_LEAN_AND_MEAN
-DNTDDI_VERSION=0x05010000
-D_WIN32_WINNT=0x0501
-D_WIN32_IE=0x0500
-D_WIN32_IE=0x0501
-D_CRT_SECURE_NO_DEPRECATE
-D_SCL_SECURE_NO_DEPRECATE
)

2
dist/mac/Info.plist vendored
View File

@@ -45,7 +45,7 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>3.3.11</string>
<string>3.3.12</string>
<key>CFBundleSignature</key>
<string>qBit</string>
<key>CFBundleExecutable</key>

View File

@@ -1,2 +1,3 @@
set(BU_CHMOD_BUNDLE_ITEMS ON)
include(BundleUtilities)
fixup_bundle("$ENV{DESTDIR}/${CMAKE_INSTALL_PREFIX}/qbittorrent.app" "" "")

View File

@@ -1,61 +1,66 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Copyright 2014 sledgehammer999 <sledgehammer999@qbittorrent.org> -->
<component type="desktop">
<id>qBittorrent.desktop</id>
<metadata_license>CC0-1.0</metadata_license>
<project_license>GPL-2.0 and OpenSSL</project_license>
<name>qBittorrent</name>
<summary>A Bittorrent Client</summary>
<description>
<p>
<id>qBittorrent.desktop</id>
<metadata_license>CC0-1.0</metadata_license>
<project_license>GPL-2.0 and OpenSSL</project_license>
<name>qBittorrent</name>
<summary>A Bittorrent Client</summary>
<description>
<p>
Aiming to be a good alternative to all other bittorrent clients out
there, qBittorrent is fast, stable and provides unicode support as well
as many other features. Additionally, qBittorrent runs and provides those
same features on all major platforms (Linux, Mac OS X, Windows, OS/2, FreeBSD).
</p>
<p>
<p>
It is programmed in C++ / Qt and uses libtorrent (sometimes called
libtorrent-rasterbar) by Arvid Norberg. GeoLite data, created by MaxMind,
are included in qBittorrent. Its features include:
</p>
<ul>
<li>Polished µTorrent-like User Interface</li>
<li>Well-integrated and extensible Search Engine</li>
<li>All Bittorrent extensions (DHT, Peer Exchange, Full encryption, Magnet/BitComet URIs, ...)</li>
<li>Remote control through a Web user interface</li>
<li>Advanced control over trackers, peers and torrents</li>
<li>UPnP / NAT-PMP port forwarding support</li>
<li>Available in ~25 languages (Unicode support)</li>
<li>Torrent creation tool</li>
<li>Advanced RSS support with download filters (inc. regex)</li>
<li>Bandwidth scheduler</li>
<li>IP Filtering (eMule and PeerGuardian compatible)</li>
<li>IPv6 compliant</li>
<li>Sequential downloading (aka "Download in order")</li>
</ul>
</description>
<screenshots>
<screenshot type="default">
<image width="1200" height="675">
<ul>
<li>Polished µTorrent-like User Interface</li>
<li>Well-integrated and extensible Search Engine</li>
<li>All Bittorrent extensions (DHT, Peer Exchange, Full encryption, Magnet/BitComet URIs, ...)</li>
<li>Remote control through a Web user interface</li>
<li>Advanced control over trackers, peers and torrents</li>
<li>UPnP / NAT-PMP port forwarding support</li>
<li>Available in ~25 languages (Unicode support)</li>
<li>Torrent creation tool</li>
<li>Advanced RSS support with download filters (inc. regex)</li>
<li>Bandwidth scheduler</li>
<li>IP Filtering (eMule and PeerGuardian compatible)</li>
<li>IPv6 compliant</li>
<li>Sequential downloading (aka "Download in order")</li>
</ul>
</description>
<screenshots>
<screenshot type="default">
<image height="675" width="1200">
https://alexpl.fedorapeople.org/AppData/qbittorrent/screens/qbittorrent_01.png
</image>
</screenshot>
<screenshot>
<image width="1200" height="675">
</screenshot>
<screenshot>
<image height="675" width="1200">
https://alexpl.fedorapeople.org/AppData/qbittorrent/screens/qbittorrent_02.png
</image>
</screenshot>
<screenshot>
<image width="1200" height="675">
</screenshot>
<screenshot>
<image height="675" width="1200">
https://alexpl.fedorapeople.org/AppData/qbittorrent/screens/qbittorrent_03.png
</image>
</screenshot>
<screenshot>
<image width="1200" height="675">
</screenshot>
<screenshot>
<image height="675" width="1200">
https://alexpl.fedorapeople.org/AppData/qbittorrent/screens/qbittorrent_04.png
</image>
</screenshot>
</screenshots>
<url type="homepage">http://www.qbittorrent.org/</url>
<update_contact>sledgehammer999@qbittorrent.org</update_contact>
</screenshot>
</screenshots>
<url type="homepage">http://www.qbittorrent.org/</url>
<update_contact>sledgehammer999@qbittorrent.org</update_contact>
<developer_name>The qBittorrent Project</developer_name>
<url type="bugtracker">http://bugs.qbittorrent.org/</url>
<url type="donation">https://www.qbittorrent.org/donate</url>
<url type="help">http://forum.qbittorrent.org/</url>
<url type="translate">https://github.com/qbittorrent/qBittorrent/wiki/How-to-translate-qBittorrent</url>
</component>

View File

@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_AFRIKAANS} "A previous installation wa
LangString inst_unist ${LANG_AFRIKAANS} "Uninstalling previous version."
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_AFRIKAANS} "Launch qBittorrent."
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_AFRIKAANS} "This installer works only in 64-bit Windows versions."
;------------------------------------

View File

@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_ALBANIAN} "A previous installation was
LangString inst_unist ${LANG_ALBANIAN} "Uninstalling previous version."
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_ALBANIAN} "Launch qBittorrent."
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_ALBANIAN} "This installer works only in 64-bit Windows versions."
;------------------------------------

View File

@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_ARABIC} "A previous installation was d
LangString inst_unist ${LANG_ARABIC} "جاري ازالة النسخة السابقة من البرنامج"
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_ARABIC} "تشغيل البرنامج"
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_ARABIC} "This installer works only in 64-bit Windows versions."
;------------------------------------

View File

@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_BASQUE} "A previous installation was d
LangString inst_unist ${LANG_BASQUE} "Aurreko bertsioa kentzen."
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_BASQUE} "Abiarazi qBittorrent."
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_BASQUE} "This installer works only in 64-bit Windows versions."
;------------------------------------

View File

@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_BELARUSIAN} "A previous installation w
LangString inst_unist ${LANG_BELARUSIAN} "Uninstalling previous version."
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_BELARUSIAN} "Launch qBittorrent."
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_BELARUSIAN} "This installer works only in 64-bit Windows versions."
;------------------------------------

View File

@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_BOSNIAN} "A previous installation was
LangString inst_unist ${LANG_BOSNIAN} "Uninstalling previous version."
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_BOSNIAN} "Launch qBittorrent."
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_BOSNIAN} "This installer works only in 64-bit Windows versions."
;------------------------------------

View File

@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_BRETON} "A previous installation was d
LangString inst_unist ${LANG_BRETON} "Uninstalling previous version."
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_BRETON} "Launch qBittorrent."
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_BRETON} "This installer works only in 64-bit Windows versions."
;------------------------------------

View File

@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_BULGARIAN} "A previous installation wa
LangString inst_unist ${LANG_BULGARIAN} "Uninstalling previous version."
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_BULGARIAN} "Launch qBittorrent."
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_BULGARIAN} "This installer works only in 64-bit Windows versions."
;------------------------------------

View File

@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_CATALAN} "A previous installation was
LangString inst_unist ${LANG_CATALAN} "Uninstalling previous version."
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_CATALAN} "Launch qBittorrent."
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_CATALAN} "This installer works only in 64-bit Windows versions."
;------------------------------------

View File

@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_CROATIAN} "A previous installation was
LangString inst_unist ${LANG_CROATIAN} "Deinstaliraj prethodnu verziju."
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_CROATIAN} "Pokreni qBittorrent."
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_CROATIAN} "This installer works only in 64-bit Windows versions."
;------------------------------------

View File

@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_CZECH} "A previous installation was de
LangString inst_unist ${LANG_CZECH} "Odebírání předchozí verze."
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_CZECH} "Spustit qBittorrent."
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_CZECH} "This installer works only in 64-bit Windows versions."
;------------------------------------

View File

@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_DANISH} "A previous installation was d
LangString inst_unist ${LANG_DANISH} "Uninstalling previous version."
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_DANISH} "Launch qBittorrent."
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_DANISH} "This installer works only in 64-bit Windows versions."
;------------------------------------

View File

@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_DUTCH} "A previous installation was de
LangString inst_unist ${LANG_DUTCH} "Uninstalling previous version."
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_DUTCH} "Launch qBittorrent."
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_DUTCH} "This installer works only in 64-bit Windows versions."
;------------------------------------

View File

@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_ENGLISH} "A previous installation was
LangString inst_unist ${LANG_ENGLISH} "Uninstalling previous version."
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
;------------------------------------

View File

@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_ESPERANTO} "A previous installation wa
LangString inst_unist ${LANG_ESPERANTO} "Uninstalling previous version."
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_ESPERANTO} "Launch qBittorrent."
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_ESPERANTO} "This installer works only in 64-bit Windows versions."
;------------------------------------

View File

@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_ESTONIAN} "A previous installation was
LangString inst_unist ${LANG_ESTONIAN} "Uninstalling previous version."
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_ESTONIAN} "Launch qBittorrent."
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_ESTONIAN} "This installer works only in 64-bit Windows versions."
;------------------------------------

View File

@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_FARSI} "A previous installation was de
LangString inst_unist ${LANG_FARSI} "Uninstalling previous version."
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_FARSI} "Launch qBittorrent."
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_FARSI} "This installer works only in 64-bit Windows versions."
;------------------------------------

View File

@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_FINNISH} "A previous installation was
LangString inst_unist ${LANG_FINNISH} "Uninstalling previous version."
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_FINNISH} "Launch qBittorrent."
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_FINNISH} "This installer works only in 64-bit Windows versions."
;------------------------------------

View File

@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_FRENCH} "Une installation précédente
LangString inst_unist ${LANG_FRENCH} "Désinstallation de la version précédente."
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_FRENCH} "Lancer qBittorrent."
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_FRENCH} "Cet installateur ne fonctionne que dans les versions 64 bits de Windows."
;------------------------------------

View File

@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_GALICIAN} "A previous installation was
LangString inst_unist ${LANG_GALICIAN} "Desinstalando a versión anterior."
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_GALICIAN} "Iniciar qBittorrent."
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_GALICIAN} "This installer works only in 64-bit Windows versions."
;------------------------------------

View File

@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_GERMAN} "Eine ältere Installation wur
LangString inst_unist ${LANG_GERMAN} "Vorherige Version wird deinstalliert."
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_GERMAN} "Starte qBittorrent."
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_GERMAN} "This installer works only in 64-bit Windows versions."
;------------------------------------

View File

@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_GREEK} "A previous installation was de
LangString inst_unist ${LANG_GREEK} "Uninstalling previous version."
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_GREEK} "Launch qBittorrent."
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_GREEK} "This installer works only in 64-bit Windows versions."
;------------------------------------

View File

@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_HEBREW} "A previous installation was d
LangString inst_unist ${LANG_HEBREW} "Uninstalling previous version."
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_HEBREW} "Launch qBittorrent."
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_HEBREW} "This installer works only in 64-bit Windows versions."
;------------------------------------

View File

@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_HUNGARIAN} "A previous installation wa
LangString inst_unist ${LANG_HUNGARIAN} "Uninstalling previous version."
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_HUNGARIAN} "Launch qBittorrent."
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_HUNGARIAN} "This installer works only in 64-bit Windows versions."
;------------------------------------

View File

@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_ICELANDIC} "A previous installation wa
LangString inst_unist ${LANG_ICELANDIC} "Uninstalling previous version."
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_ICELANDIC} "Launch qBittorrent."
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_ICELANDIC} "This installer works only in 64-bit Windows versions."
;------------------------------------

View File

@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_INDONESIAN} "A previous installation w
LangString inst_unist ${LANG_INDONESIAN} "Uninstalling previous version."
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_INDONESIAN} "Launch qBittorrent."
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_INDONESIAN} "This installer works only in 64-bit Windows versions."
;------------------------------------

View File

@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_IRISH} "A previous installation was de
LangString inst_unist ${LANG_IRISH} "Uninstalling previous version."
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_IRISH} "Launch qBittorrent."
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_IRISH} "This installer works only in 64-bit Windows versions."
;------------------------------------

View File

@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_ITALIAN} "A previous installation was
LangString inst_unist ${LANG_ITALIAN} "Disinstallazione versione precedente."
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_ITALIAN} "Esegui qBittorrent."
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_ITALIAN} "This installer works only in 64-bit Windows versions."
;------------------------------------

View File

@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_JAPANESE} "A previous installation was
LangString inst_unist ${LANG_JAPANESE} "以前のバージョンをアンインストールしています。"
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_JAPANESE} "qBittorrent を起動する"
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_JAPANESE} "This installer works only in 64-bit Windows versions."
;------------------------------------

View File

@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_KOREAN} "A previous installation was d
LangString inst_unist ${LANG_KOREAN} "Uninstalling previous version."
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_KOREAN} "Launch qBittorrent."
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_KOREAN} "This installer works only in 64-bit Windows versions."
;------------------------------------

View File

@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_KURDISH} "A previous installation was
LangString inst_unist ${LANG_KURDISH} "Uninstalling previous version."
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_KURDISH} "Launch qBittorrent."
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_KURDISH} "This installer works only in 64-bit Windows versions."
;------------------------------------

View File

@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_LATVIAN} "A previous installation was
LangString inst_unist ${LANG_LATVIAN} "Uninstalling previous version."
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_LATVIAN} "Launch qBittorrent."
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_LATVIAN} "This installer works only in 64-bit Windows versions."
;------------------------------------

View File

@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_LITHUANIAN} "A previous installation w
LangString inst_unist ${LANG_LITHUANIAN} "Šalinu ankstesnę versiją."
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_LITHUANIAN} "Paleisti qBittorrent."
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_LITHUANIAN} "This installer works only in 64-bit Windows versions."
;------------------------------------

View File

@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_LUXEMBOURGISH} "A previous installatio
LangString inst_unist ${LANG_LUXEMBOURGISH} "Uninstalling previous version."
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_LUXEMBOURGISH} "Launch qBittorrent."
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_LUXEMBOURGISH} "This installer works only in 64-bit Windows versions."
;------------------------------------

View File

@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_MACEDONIAN} "A previous installation w
LangString inst_unist ${LANG_MACEDONIAN} "Uninstalling previous version."
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_MACEDONIAN} "Launch qBittorrent."
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_MACEDONIAN} "This installer works only in 64-bit Windows versions."
;------------------------------------

View File

@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_MALAY} "A previous installation was de
LangString inst_unist ${LANG_MALAY} "Uninstalling previous version."
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_MALAY} "Launch qBittorrent."
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_MALAY} "This installer works only in 64-bit Windows versions."
;------------------------------------

View File

@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_MONGOLIAN} "A previous installation wa
LangString inst_unist ${LANG_MONGOLIAN} "Uninstalling previous version."
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_MONGOLIAN} "Launch qBittorrent."
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_MONGOLIAN} "This installer works only in 64-bit Windows versions."
;------------------------------------

View File

@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_NORWEGIAN} "A previous installation wa
LangString inst_unist ${LANG_NORWEGIAN} "Avinstallerer forrige versjon."
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_NORWEGIAN} "Sett i gang qBittorrent."
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_NORWEGIAN} "This installer works only in 64-bit Windows versions."
;------------------------------------

View File

@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_NORWEGIANNYNORSK} "A previous installa
LangString inst_unist ${LANG_NORWEGIANNYNORSK} "Uninstalling previous version."
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_NORWEGIANNYNORSK} "Launch qBittorrent."
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_NORWEGIANNYNORSK} "This installer works only in 64-bit Windows versions."
;------------------------------------

View File

@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_POLISH} "A previous installation was d
LangString inst_unist ${LANG_POLISH} "Uninstalling previous version."
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_POLISH} "Launch qBittorrent."
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_POLISH} "This installer works only in 64-bit Windows versions."
;------------------------------------

View File

@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_PORTUGUESE} "Uma antiga instalação f
LangString inst_unist ${LANG_PORTUGUESE} "A desinstalar versão anterior."
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_PORTUGUESE} "Iniciar qBittorrent."
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_PORTUGUESE} "This installer works only in 64-bit Windows versions."
;------------------------------------

View File

@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_PORTUGUESEBR} "Uma instalação anteri
LangString inst_unist ${LANG_PORTUGUESEBR} "Desinstalando versão anterior."
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_PORTUGUESEBR} "Executar qBittorrent."
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_PORTUGUESEBR} "This installer works only in 64-bit Windows versions."
;------------------------------------

View File

@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_ROMANIAN} "A previous installation was
LangString inst_unist ${LANG_ROMANIAN} "Uninstalling previous version."
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_ROMANIAN} "Launch qBittorrent."
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_ROMANIAN} "This installer works only in 64-bit Windows versions."
;------------------------------------

View File

@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_RUSSIAN} "Обнаружена пре
LangString inst_unist ${LANG_RUSSIAN} "Деинсталлируем старую версию."
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_RUSSIAN} "Запустить qBittorrent."
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_RUSSIAN} "This installer works only in 64-bit Windows versions."
;------------------------------------

View File

@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_SERBIAN} "A previous installation was
LangString inst_unist ${LANG_SERBIAN} "Uninstalling previous version."
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_SERBIAN} "Launch qBittorrent."
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_SERBIAN} "This installer works only in 64-bit Windows versions."
;------------------------------------

View File

@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_SERBIANLATIN} "A previous installation
LangString inst_unist ${LANG_SERBIANLATIN} "Uninstalling previous version."
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_SERBIANLATIN} "Launch qBittorrent."
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_SERBIANLATIN} "This installer works only in 64-bit Windows versions."
;------------------------------------

View File

@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_SIMPCHINESE} "A previous installation
LangString inst_unist ${LANG_SIMPCHINESE} "Uninstalling previous version."
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_SIMPCHINESE} "Launch qBittorrent."
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_SIMPCHINESE} "This installer works only in 64-bit Windows versions."
;------------------------------------

View File

@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_SLOVAK} "A previous installation was d
LangString inst_unist ${LANG_SLOVAK} "Uninstalling previous version."
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_SLOVAK} "Launch qBittorrent."
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_SLOVAK} "This installer works only in 64-bit Windows versions."
;------------------------------------

View File

@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_SLOVENIAN} "A previous installation wa
LangString inst_unist ${LANG_SLOVENIAN} "Uninstalling previous version."
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_SLOVENIAN} "Launch qBittorrent."
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_SLOVENIAN} "This installer works only in 64-bit Windows versions."
;------------------------------------

View File

@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_SPANISH} "Se detectó una instalación
LangString inst_unist ${LANG_SPANISH} "Desinstalando la versión anterior."
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_SPANISH} "Iniciar qBittorrent."
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_SPANISH} "This installer works only in 64-bit Windows versions."
;------------------------------------

View File

@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_SPANISHINTERNATIONAL} "Se detectó una
LangString inst_unist ${LANG_SPANISHINTERNATIONAL} "Desinstalando la versión anterior."
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_SPANISHINTERNATIONAL} "Iniciar qBittorrent."
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_SPANISHINTERNATIONAL} "This installer works only in 64-bit Windows versions."
;------------------------------------

View File

@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_SWEDISH} "A previous installation was
LangString inst_unist ${LANG_SWEDISH} "Uninstalling previous version."
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_SWEDISH} "Launch qBittorrent."
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_SWEDISH} "This installer works only in 64-bit Windows versions."
;------------------------------------

View File

@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_THAI} "A previous installation was det
LangString inst_unist ${LANG_THAI} "Uninstalling previous version."
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_THAI} "Launch qBittorrent."
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_THAI} "This installer works only in 64-bit Windows versions."
;------------------------------------

View File

@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_TRADCHINESE} "A previous installation
LangString inst_unist ${LANG_TRADCHINESE} "正在移除先前版本"
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_TRADCHINESE} "啟動 qBittorrent"
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_TRADCHINESE} "This installer works only in 64-bit Windows versions."
;------------------------------------

View File

@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_TURKISH} "Önceki bir kurulum algılan
LangString inst_unist ${LANG_TURKISH} "Önceki sürüm kaldırılıyor."
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_TURKISH} "qBittorrent'i çalıştır."
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_TURKISH} "This installer works only in 64-bit Windows versions."
;------------------------------------

View File

@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_UKRAINIAN} "A previous installation wa
LangString inst_unist ${LANG_UKRAINIAN} "Uninstalling previous version."
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_UKRAINIAN} "Launch qBittorrent."
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_UKRAINIAN} "This installer works only in 64-bit Windows versions."
;------------------------------------

View File

@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_UZBEK} "A previous installation was de
LangString inst_unist ${LANG_UZBEK} "Uninstalling previous version."
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_UZBEK} "Launch qBittorrent."
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_UZBEK} "This installer works only in 64-bit Windows versions."
;------------------------------------

View File

@@ -22,6 +22,8 @@ LangString inst_uninstall_question ${LANG_WELSH} "A previous installation was de
LangString inst_unist ${LANG_WELSH} "Uninstalling previous version."
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_WELSH} "Launch qBittorrent."
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_WELSH} "This installer works only in 64-bit Windows versions."
;------------------------------------

View File

@@ -1,14 +1,17 @@
Section "-hidden"
Var uninstallerPath
Section "-hidden"
;Search if qBittorrent is already installed.
FindFirst $0 $1 "$INSTDIR\uninst.exe"
FindFirst $0 $1 "$uninstallerPath\uninst.exe"
FindClose $0
StrCmp $1 "" done
;Run the uninstaller of the previous install.
DetailPrint $(inst_unist)
ExecWait '"$INSTDIR\uninst.exe" /S _?=$INSTDIR'
Delete "$INSTDIR\uninst.exe"
ExecWait '"$uninstallerPath\uninst.exe" /S _?=$uninstallerPath'
Delete "$uninstallerPath\uninst.exe"
RMDir "$uninstallerPath"
done:
@@ -18,14 +21,14 @@ SectionEnd
Section $(inst_qbt_req) ;"qBittorrent (required)"
SectionIn RO
; Set output path to the installation directory.
SetOutPath $INSTDIR
;Create 'translations' directory
CreateDirectory $INSTDIR\translations
; Put file there
; Put file there
File "qbittorrent.exe"
File "qbittorrent.pdb"
File "qt.conf"
@@ -74,10 +77,10 @@ Section $(inst_qbt_req) ;"qBittorrent (required)"
File /oname=translations\qtbase_ru.qm "translations\qtbase_ru.qm"
File /oname=translations\qtbase_sk.qm "translations\qtbase_sk.qm"
File /oname=translations\qtbase_uk.qm "translations\qtbase_uk.qm"
; Write the installation path into the registry
; Write the installation path into the registry
WriteRegStr HKLM "Software\qBittorrent" "InstallLocation" "$INSTDIR"
; Write the uninstall keys for Windows
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\qBittorrent" "DisplayName" "qBittorrent ${PROG_VERSION}"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\qBittorrent" "UninstallString" '"$INSTDIR\uninst.exe"'
@@ -87,53 +90,53 @@ Section $(inst_qbt_req) ;"qBittorrent (required)"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\qBittorrent" "DisplayVersion" "${PROG_VERSION}"
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\qBittorrent" "NoModify" 1
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\qBittorrent" "NoRepair" 1
WriteUninstaller "uninst.exe"
WriteUninstaller "uninst.exe"
${GetSize} "$INSTDIR" "/S=0K" $0 $1 $2
IntFmt $0 "0x%08X" $0
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\qBittorrent" "EstimatedSize" "$0"
; qBittorrent ProgID
WriteRegStr HKLM "Software\Classes\qBittorrent" "" "qBittorrent Torrent File"
WriteRegStr HKLM "Software\Classes\qBittorrent" "FriendlyTypeName" "qBittorrent Torrent File"
WriteRegStr HKLM "Software\Classes\qBittorrent\shell" "" "open"
WriteRegStr HKLM "Software\Classes\qBittorrent\shell\open\command" "" '"$INSTDIR\qbittorrent.exe" "%1"'
WriteRegStr HKLM "Software\Classes\qBittorrent\DefaultIcon" "" '"$INSTDIR\qbittorrent.exe",1'
SectionEnd
; Optional section (can be disabled by the user)
Section /o $(inst_dekstop) ;"Create Desktop Shortcut"
CreateShortCut "$DESKTOP\qBittorrent.lnk" "$INSTDIR\qbittorrent.exe"
SectionEnd
Section $(inst_startmenu) ;"Create Start Menu Shortcut"
CreateDirectory "$SMPROGRAMS\qBittorrent"
CreateDirectory "$SMPROGRAMS\qBittorrent"
CreateShortCut "$SMPROGRAMS\qBittorrent\qBittorrent.lnk" "$INSTDIR\qbittorrent.exe"
CreateShortCut "$SMPROGRAMS\qBittorrent\Uninstall.lnk" "$INSTDIR\uninst.exe"
SectionEnd
Section $(inst_torrent) ;"Open .torrent files with qBittorrent"
ReadRegStr $0 HKLM "Software\Classes\.torrent" ""
StrCmp $0 "qBittorrent" clear_errors 0
;Check if empty string
StrCmp $0 "" clear_errors 0
;Write old value to OpenWithProgIds
WriteRegStr HKLM "Software\Classes\.torrent\OpenWithProgIds" $0 ""
clear_errors:
ClearErrors
WriteRegStr HKLM "Software\Classes\.torrent" "" "qBittorrent"
WriteRegStr HKLM "Software\Classes\.torrent" "Content Type" "application/x-bittorrent"
!insertmacro UAC_AsUser_Call Function inst_torrent_user ${UAC_SYNCREGISTERS}|${UAC_SYNCOUTDIR}|${UAC_SYNCINSTDIR}
System::Call 'Shell32::SHChangeNotify(i ${SHCNE_ASSOCCHANGED}, i ${SHCNF_IDLIST}, i 0, i 0)'
SectionEnd
@@ -141,13 +144,13 @@ SectionEnd
Function inst_torrent_user
ReadRegStr $0 HKCU "Software\Classes\.torrent" ""
StrCmp $0 "qBittorrent" clear_errors 0
;Check if empty string
StrCmp $0 "" clear_errors 0
;Write old value to OpenWithProgIds
WriteRegStr HKCU "Software\Classes\.torrent\OpenWithProgIds" $0 ""
clear_errors:
ClearErrors
@@ -164,7 +167,7 @@ Section $(inst_magnet) ;"Open magnet links with qBittorrent"
WriteRegStr HKLM "Software\Classes\magnet\DefaultIcon" "" '"$INSTDIR\qbittorrent.exe",1'
WriteRegStr HKLM "Software\Classes\magnet\shell" "" "open"
WriteRegStr HKLM "Software\Classes\magnet\shell\open\command" "" '"$INSTDIR\qbittorrent.exe" "%1"'
!insertmacro UAC_AsUser_Call Function inst_magnet_user ${UAC_SYNCREGISTERS}|${UAC_SYNCOUTDIR}|${UAC_SYNCINSTDIR}
System::Call 'Shell32::SHChangeNotify(i ${SHCNE_ASSOCCHANGED}, i ${SHCNF_IDLIST}, i 0, i 0)'
@@ -185,8 +188,8 @@ FunctionEnd
Section $(inst_firewall)
DetailPrint $(inst_firewallinfo)
nsisFirewallW::AddAuthorizedApplication "$INSTDIR\qbittorrent.exe" "qBittorrent"
nsisFirewallW::AddAuthorizedApplication "$INSTDIR\qbittorrent.exe" "qBittorrent"
SectionEnd
;--------------------------------
@@ -196,11 +199,21 @@ Function .onInit
!insertmacro Init "installer"
!insertmacro MUI_LANGDLL_DISPLAY
!ifdef APP64BIT
${IfNot} ${RunningX64}
MessageBox MB_OK|MB_ICONEXCLAMATION $(inst_requires_64bit)
Abort
${EndIf}
!endif
;Search if qBittorrent is already installed.
FindFirst $0 $1 "$INSTDIR\uninst.exe"
FindClose $0
StrCmp $1 "" done
;Copy old value to var so we can call the correct uninstaller
StrCpy $uninstallerPath $INSTDIR
;Inform the user
MessageBox MB_OKCANCEL|MB_ICONINFORMATION $(inst_uninstall_question) /SD IDOK IDOK done
Quit
@@ -228,3 +241,7 @@ Function PageFinishRun
!insertmacro UAC_AsUser_ExecShell "" "$INSTDIR\qbittorrent.exe" "" "" ""
FunctionEnd
Function .onInstSuccess
SetErrorLevel 0
FunctionEnd

View File

@@ -1,4 +1,5 @@
Unicode true
ManifestDPIAware true
;Compress the header too
!packhdr "$%TEMP%\exehead.tmp" 'upx.exe -9 --best --ultra-brute "$%TEMP%\exehead.tmp"'
@@ -7,9 +8,15 @@ SetCompressor /SOLID LZMA
SetCompressorDictSize 64
XPStyle on
;Uncomment when packaging 64bit qbittorrent
;!define APP64BIT
!include "MUI.nsh"
!include "UAC.nsh"
!include "FileFunc.nsh"
!ifdef APP64BIT
!include "x64.nsh"
!endif
;For the file association
!define SHCNE_ASSOCCHANGED 0x8000000
@@ -19,16 +26,26 @@ XPStyle on
!define CSIDL_APPDATA '0x1A' ;Application Data path
!define CSIDL_LOCALAPPDATA '0x1C' ;Local Application Data path
!define PROG_VERSION "3.3.11"
; Program specific
!define PROG_VERSION "3.3.12"
!define MUI_FINISHPAGE_RUN
!define MUI_FINISHPAGE_RUN_FUNCTION PageFinishRun
!define MUI_FINISHPAGE_RUN_TEXT $(launch_qbt)
; The name of the installer
Name "qBittorrent ${PROG_VERSION}"
!ifndef APP64BIT
; The name of the installer
Name "qBittorrent ${PROG_VERSION}"
; The file to write
OutFile "qbittorrent_${PROG_VERSION}_setup.exe"
; The file to write
OutFile "qbittorrent_${PROG_VERSION}_setup.exe"
!else
; The name of the installer
Name "qBittorrent ${PROG_VERSION} x64"
; The file to write
OutFile "qbittorrent_${PROG_VERSION}_x64_setup.exe"
!endif
;Installer Version Information
VIAddVersionKey "ProductName" "qBittorrent"
@@ -39,8 +56,15 @@ VIAddVersionKey "FileVersion" "${PROG_VERSION}"
VIProductVersion "${PROG_VERSION}.0"
; The default installation directory
InstallDir $PROGRAMFILES\qBittorrent
; The default installation directory. It changes depending if we install in the 64bit dir or not.
; A caveat of this is if a user has installed a 32bit version and then runs the 64bit installer
; (which in turn launches the 32bit uninstaller first) the value will still point to the 32bit location.
; The user has to manually uninstall the old version and THEN run the 64bit installer
!ifndef APP64BIT
InstallDir $PROGRAMFILES32\qBittorrent
!else
InstallDir $PROGRAMFILES64\qBittorrent
!endif
; Registry key to check for directory (so if you install again, it will
; overwrite the old one automatically)

View File

@@ -1,10 +1,10 @@
Section "un.$(remove_files)" ;"un.Remove files"
SectionIn RO
; Remove files and uninstaller
; Remove files and uninstaller
Delete "$INSTDIR\qbittorrent.exe"
Delete "$INSTDIR\qbittorrent.pdb"
Delete "$INSTDIR\qt.conf"
Delete "$INSTDIR\qt.conf"
Delete "$INSTDIR\translations\qt_ar.qm"
Delete "$INSTDIR\translations\qt_bg.qm"
Delete "$INSTDIR\translations\qt_ca.qm"
@@ -51,8 +51,8 @@
Delete "$INSTDIR\translations\qtbase_sk.qm"
Delete "$INSTDIR\translations\qtbase_uk.qm"
Delete "$INSTDIR\uninst.exe"
; Remove directories used
; Remove directories used
RMDir /r "$INSTDIR\translations"
RMDir "$INSTDIR"
SectionEnd
@@ -71,16 +71,16 @@ Section "un.$(remove_associations)" ;"un.Remove file associations"
DetailPrint "$(uninst_tor_warn) $0"
DeleteRegValue HKLM "Software\Classes\.torrent" ""
DeleteRegKey /ifempty HKLM "Software\Classes\.torrent"
torrent_end:
ReadRegStr $0 HKLM "Software\Classes\magnet\shell\open\command" ""
StrCmp $0 '"$INSTDIR\qbittorrent.exe" "%1"' 0 magnet_end
DetailPrint "$(uninst_mag_warn) $0"
DeleteRegKey HKLM "Software\Classes\magnet"
magnet_end:
!insertmacro UAC_AsUser_Call Function un.remove_associations_user ${UAC_SYNCREGISTERS}|${UAC_SYNCOUTDIR}|${UAC_SYNCINSTDIR}
System::Call 'Shell32::SHChangeNotify(i ${SHCNE_ASSOCCHANGED}, i ${SHCNF_IDLIST}, i 0, i 0)'
SectionEnd
@@ -90,23 +90,23 @@ Function un.remove_associations_user
DetailPrint "$(uninst_tor_warn) $0"
DeleteRegValue HKCU "Software\Classes\.torrent" ""
DeleteRegKey /ifempty HKCU "Software\Classes\.torrent"
torrent_end:
ReadRegStr $0 HKCU "Software\Classes\magnet\shell\open\command" ""
StrCmp $0 '"$INSTDIR\qbittorrent.exe" "%1"' 0 magnet_end
DetailPrint "$(uninst_mag_warn) $0"
DeleteRegKey HKCU "Software\Classes\magnet"
magnet_end:
FunctionEnd
Section "un.$(remove_registry)" ;"un.Remove registry keys"
SectionIn RO
Section "un.$(remove_registry)" ;"un.Remove registry keys"
SectionIn RO
; Remove registry keys
DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\qBittorrent"
DeleteRegKey HKLM "Software\qBittorrent"
DeleteRegKey HKLM "Software\Classes\qBittorrent"
System::Call 'Shell32::SHChangeNotify(i ${SHCNE_ASSOCCHANGED}, i ${SHCNF_IDLIST}, i 0, i 0)'
SectionEnd
@@ -114,7 +114,7 @@ Section "un.$(remove_firewall)" ;
DetailPrint $(remove_firewallinfo)
nsisFirewallW::RemoveAuthorizedApplication "$INSTDIR\qbittorrent.exe"
SectionEnd
Section /o "un.$(remove_conf)" ;"un.Remove configuration files"
@@ -150,7 +150,7 @@ Function un.onInit
!insertmacro Init "uninstaller"
!insertmacro MUI_UNGETLANGUAGE
FunctionEnd
Function un.check_instance
@@ -162,7 +162,11 @@ Function un.check_instance
done:
Abort
notfound:
FunctionEnd
Function un.onUninstSuccess
SetErrorLevel 0
FunctionEnd

View File

@@ -55,6 +55,7 @@ if (WIN32)
else (MINGW)
list (APPEND QBT_APP_SOURCES ../qbittorrent.rc)
endif (MINGW)
list(APPEND QBT_APP_SOURCES ../qbittorent.exe.manifest)
endif (WIN32)
if (UNIX)
@@ -179,6 +180,6 @@ install(TARGETS ${QBT_TARGET_NAME}
BUNDLE DESTINATION .
COMPONENT runtime)
if (APPLE)
if (APPLE AND GUI)
install(SCRIPT ${OSX_RES_SRC_DIR}/bundle.cmake)
endif (APPLE)
endif (APPLE AND GUI)

View File

@@ -129,7 +129,7 @@ Application::Application(const QString &id, int &argc, char **argv)
if (isFileLoggerEnabled())
m_fileLogger = new FileLogger(fileLoggerPath(), isFileLoggerBackup(), fileLoggerMaxSize(), isFileLoggerDeleteOld(), fileLoggerAge(), static_cast<FileLogger::FileLogAgeType>(fileLoggerAgeType()));
Logger::instance()->addMessage(tr("qBittorrent %1 started", "qBittorrent v3.2.0alpha started").arg(VERSION));
Logger::instance()->addMessage(tr("qBittorrent %1 started", "qBittorrent v3.2.0alpha started").arg(QBT_VERSION));
}
#ifndef DISABLE_GUI
@@ -512,7 +512,6 @@ void Application::initializeTranslation()
Preferences* const pref = Preferences::instance();
// Load translation
QString localeStr = pref->getLocale();
QLocale::setDefault(QLocale(localeStr));
if (
#ifdef QBT_USES_QT5

View File

@@ -193,7 +193,7 @@ int main(int argc, char *argv[])
}
// Set environment variable
if (!qputenv("QBITTORRENT", QByteArray(VERSION)))
if (!qputenv("QBITTORRENT", QBT_VERSION))
std::cerr << "Couldn't set environment variable...\n";
#ifndef DISABLE_GUI
@@ -259,7 +259,6 @@ int main(int argc, char *argv[])
&& isatty(fileno(stdout)))) return EXIT_FAILURE;
#endif
srand(time(0));
#ifdef DISABLE_GUI
if (params.shouldDaemonize) {
app.reset(); // Destroy current application
@@ -364,7 +363,7 @@ void sigAbnormalHandler(int signum)
const char str1[] = "\n\n*************************************************************\nCatching signal: ";
const char *sigName = sysSigName[signum];
const char str2[] = "\nPlease file a bug report at http://bug.qbittorrent.org and provide the following information:\n\n"
"qBittorrent version: " VERSION "\n";
"qBittorrent version: " QBT_VERSION "\n";
write(STDERR_FILENO, str1, strlen(str1));
write(STDERR_FILENO, sigName, strlen(sigName));
write(STDERR_FILENO, str2, strlen(str2));
@@ -385,7 +384,7 @@ void showSplashScreen()
{
QPixmap splash_img(":/icons/skin/splash.png");
QPainter painter(&splash_img);
QString version = VERSION;
QString version = QBT_VERSION;
painter.setPen(QPen(Qt::white));
painter.setFont(QFont("Arial", 22, QFont::Black));
painter.drawText(224 - painter.fontMetrics().width(version), 270, version);
@@ -398,7 +397,7 @@ void showSplashScreen()
void displayVersion()
{
std::cout << qPrintable(qApp->applicationName()) << " " << VERSION << std::endl;
std::cout << qPrintable(qApp->applicationName()) << " " << QBT_VERSION << std::endl;
}
QString makeUsage(const QString &prg_name)

View File

@@ -60,7 +60,11 @@ public:
"</p></font>"
"<br/><hr><br/>"
"<p align=center><font size=4>"
"qBittorrent version: " VERSION "<br/>"
#if defined(__x86_64__) || defined(_M_X64)
"qBittorrent version: " QBT_VERSION " (64-bit)<br/>"
#else
"qBittorrent version: " QBT_VERSION " (32-bit)<br/>"
#endif
"Libtorrent version: %1<br/>"
"Qt version: " QT_VERSION_STR "<br/>"
"Boost version: %2<br/>"

View File

@@ -44,6 +44,7 @@ rss/rssmanager.h
utils/fs.h
utils/gzip.h
utils/misc.h
utils/random.h
utils/string.h
filesystemwatcher.h
iconprovider.h
@@ -103,6 +104,7 @@ rss/rssmanager.cpp
utils/fs.cpp
utils/gzip.cpp
utils/misc.cpp
utils/random.cpp
utils/string.cpp
filesystemwatcher.cpp
iconprovider.cpp

View File

@@ -52,6 +52,7 @@ HEADERS += \
$$PWD/utils/fs.h \
$$PWD/utils/gzip.h \
$$PWD/utils/misc.h \
$$PWD/utils/random.h \
$$PWD/utils/string.h \
$$PWD/unicodestrings.h \
$$PWD/torrentfileguard.h \
@@ -107,6 +108,7 @@ SOURCES += \
$$PWD/utils/fs.cpp \
$$PWD/utils/gzip.cpp \
$$PWD/utils/misc.cpp \
$$PWD/utils/random.cpp \
$$PWD/utils/string.cpp \
$$PWD/torrentfileguard.cpp \
$$PWD/torrentfilter.cpp \

View File

@@ -76,6 +76,7 @@
#include "base/unicodestrings.h"
#include "base/utils/misc.h"
#include "base/utils/fs.h"
#include "base/utils/random.h"
#include "base/utils/string.h"
#include "cachestatus.h"
#include "magneturi.h"
@@ -90,7 +91,7 @@
static const char PEER_ID[] = "qB";
static const char RESUME_FOLDER[] = "BT_backup";
static const char USER_AGENT[] = "qBittorrent " VERSION;
static const char USER_AGENT[] = "qBittorrent/" QBT_VERSION_2;
namespace libt = libtorrent;
using namespace BitTorrent;
@@ -301,7 +302,7 @@ Session::Session(QObject *parent)
;
#if LIBTORRENT_VERSION_NUM < 10100
libt::fingerprint fingerprint(PEER_ID, VERSION_MAJOR, VERSION_MINOR, VERSION_BUGFIX, VERSION_BUILD);
libt::fingerprint fingerprint(PEER_ID, QBT_VERSION_MAJOR, QBT_VERSION_MINOR, QBT_VERSION_BUGFIX, QBT_VERSION_BUILD);
std::string peerId = fingerprint.to_string();
const ushort port = this->port();
std::pair<int, int> ports(port, port);
@@ -331,7 +332,7 @@ Session::Session(QObject *parent)
dispatchAlerts(alertPtr.release());
});
#else
std::string peerId = libt::generate_fingerprint(PEER_ID, VERSION_MAJOR, VERSION_MINOR, VERSION_BUGFIX, VERSION_BUILD);
std::string peerId = libt::generate_fingerprint(PEER_ID, QBT_VERSION_MAJOR, QBT_VERSION_MINOR, QBT_VERSION_BUGFIX, QBT_VERSION_BUILD);
libt::settings_pack pack;
pack.set_int(libt::settings_pack::alert_mask, alertMask);
pack.set_str(libt::settings_pack::peer_fingerprint, peerId);
@@ -2210,7 +2211,7 @@ void Session::setSaveResumeDataInterval(uint value)
int Session::port() const
{
static int randomPort = rand() % 64512 + 1024;
static int randomPort = Utils::Random::rand(1024, 65535);
if (useRandomPort())
return randomPort;
return m_port;

View File

@@ -103,7 +103,7 @@ void TorrentCreatorThread::run()
{
emit updateProgress(0);
QString creator_str("qBittorrent " VERSION);
QString creator_str("qBittorrent " QBT_VERSION);
try {
libt::file_storage fs;
// Adding files to the torrent

View File

@@ -153,42 +153,6 @@ TorrentState::operator int() const
// TorrentHandle
#define SAFE_CALL(func, ...) \
try { \
m_nativeHandle.func(__VA_ARGS__); \
} \
catch (std::exception &exc) { \
qDebug() << Q_FUNC_INFO << " throws exception: " << exc.what(); \
}
#define SAFE_CALL_BOOL(func, ...) \
try { \
m_nativeHandle.func(__VA_ARGS__); \
return true; \
} \
catch (std::exception &exc) { \
qDebug() << Q_FUNC_INFO << " throws exception: " << exc.what(); \
return false; \
}
#define SAFE_RETURN(type, func, val) \
type result = val; \
try { \
result = m_nativeHandle.func(); \
} \
catch (std::exception &exc) { \
qDebug() << Q_FUNC_INFO << " throws exception: " << exc.what(); \
} \
return result;
#define SAFE_GET(var, func, ...) \
try { \
var = m_nativeHandle.func(__VA_ARGS__); \
} \
catch (std::exception &exc) { \
qDebug() << Q_FUNC_INFO << " throws exception: " << exc.what(); \
}
const qreal TorrentHandle::USE_GLOBAL_RATIO = -2.;
const qreal TorrentHandle::NO_RATIO_LIMIT = -1.;
@@ -378,8 +342,8 @@ QList<TrackerEntry> TorrentHandle::trackers() const
{
QList<TrackerEntry> entries;
std::vector<libt::announce_entry> announces;
SAFE_GET(announces, trackers);
announces = m_nativeHandle.trackers();
foreach (const libt::announce_entry &tracker, announces)
entries << tracker;
@@ -417,21 +381,15 @@ void TorrentHandle::replaceTrackers(QList<TrackerEntry> trackers)
existingTrackers.removeOne(tracker);
}
try {
m_nativeHandle.replace_trackers(announces);
if (addedTrackers.isEmpty() && existingTrackers.isEmpty()) {
m_session->handleTorrentTrackersChanged(this);
}
else {
if (!existingTrackers.isEmpty())
m_session->handleTorrentTrackersRemoved(this, existingTrackers);
if (!addedTrackers.isEmpty())
m_session->handleTorrentTrackersAdded(this, addedTrackers);
}
m_nativeHandle.replace_trackers(announces);
if (addedTrackers.isEmpty() && existingTrackers.isEmpty()) {
m_session->handleTorrentTrackersChanged(this);
}
catch (std::exception &exc) {
qDebug("torrent_handle::replace_trackers() throws exception: %s", exc.what());
else {
if (!existingTrackers.isEmpty())
m_session->handleTorrentTrackersRemoved(this, existingTrackers);
if (!addedTrackers.isEmpty())
m_session->handleTorrentTrackersAdded(this, addedTrackers);
}
}
@@ -440,14 +398,14 @@ bool TorrentHandle::addTracker(const TrackerEntry &tracker)
if (trackers().contains(tracker))
return false;
SAFE_CALL_BOOL(add_tracker, tracker.nativeEntry());
m_nativeHandle.add_tracker(tracker.nativeEntry());
return true;
}
QList<QUrl> TorrentHandle::urlSeeds() const
{
QList<QUrl> urlSeeds;
std::set<std::string> seeds;
SAFE_GET(seeds, url_seeds);
std::set<std::string> seeds = m_nativeHandle.url_seeds();
foreach (const std::string &urlSeed, seeds)
urlSeeds.append(QUrl(urlSeed.c_str()));
@@ -484,7 +442,8 @@ bool TorrentHandle::addUrlSeed(const QUrl &urlSeed)
QList<QUrl> seeds = urlSeeds();
if (seeds.contains(urlSeed)) return false;
SAFE_CALL_BOOL(add_url_seed, Utils::String::toStdString(urlSeed.toString()));
m_nativeHandle.add_url_seed(Utils::String::toStdString(urlSeed.toString()));
return true;
}
bool TorrentHandle::removeUrlSeed(const QUrl &urlSeed)
@@ -492,7 +451,8 @@ bool TorrentHandle::removeUrlSeed(const QUrl &urlSeed)
QList<QUrl> seeds = urlSeeds();
if (!seeds.contains(urlSeed)) return false;
SAFE_CALL_BOOL(remove_url_seed, Utils::String::toStdString(urlSeed.toString()));
m_nativeHandle.remove_url_seed(Utils::String::toStdString(urlSeed.toString()));
return true;
}
bool TorrentHandle::connectPeer(const PeerAddress &peerAddress)
@@ -502,14 +462,15 @@ bool TorrentHandle::connectPeer(const PeerAddress &peerAddress)
if (ec) return false;
boost::asio::ip::tcp::endpoint ep(addr, peerAddress.port);
SAFE_CALL_BOOL(connect_peer, ep);
m_nativeHandle.connect_peer(ep);
return true;
}
bool TorrentHandle::needSaveResumeData() const
{
if (m_needSaveResumeData) return true;
SAFE_RETURN(bool, need_save_resume_data, false);
return m_nativeHandle.need_save_resume_data();
}
void TorrentHandle::saveResumeData(bool updateStatus)
@@ -517,7 +478,7 @@ void TorrentHandle::saveResumeData(bool updateStatus)
if (updateStatus) // to update queue_position, see discussion in PR #6154
this->updateStatus();
SAFE_CALL(save_resume_data);
m_nativeHandle.save_resume_data();
m_needSaveResumeData = false;
}
@@ -613,7 +574,7 @@ QStringList TorrentHandle::absoluteFilePathsUnwanted() const
QDir saveDir(savePath(true));
QStringList res;
std::vector<int> fp;
SAFE_GET(fp, file_priorities);
fp = m_nativeHandle.file_priorities();
int count = static_cast<int>(fp.size());
for (int i = 0; i < count; ++i) {
@@ -630,7 +591,7 @@ QStringList TorrentHandle::absoluteFilePathsUnwanted() const
QVector<int> TorrentHandle::filePriorities() const
{
std::vector<int> fp;
SAFE_GET(fp, file_priorities);
fp = m_nativeHandle.file_priorities();
return QVector<int>::fromStdVector(fp);
}
@@ -718,7 +679,9 @@ bool TorrentHandle::isErrored() const
bool TorrentHandle::isSeed() const
{
// Affected by bug http://code.rasterbar.com/libtorrent/ticket/402
//SAFE_RETURN(bool, is_seed, false);
//bool result;
//result = m_nativeHandle.is_seed());
//return result;
// May suffer from approximation problems
//return (progress() == 1.);
// This looks safe
@@ -742,7 +705,7 @@ bool TorrentHandle::hasFirstLastPiecePriority() const
// Get int first media file
std::vector<int> fp;
SAFE_GET(fp, file_priorities);
fp = m_nativeHandle.file_priorities();
TorrentInfo::PieceRange extremities;
bool found = false;
@@ -758,10 +721,8 @@ bool TorrentHandle::hasFirstLastPiecePriority() const
if (!found) return false; // No media file
int first = 0;
int last = 0;
SAFE_GET(first, piece_priority, extremities.first());
SAFE_GET(last, piece_priority, extremities.last());
int first = m_nativeHandle.piece_priority(extremities.first());
int last = m_nativeHandle.piece_priority(extremities.last());
return ((first == 7) && (last == 7));
}
@@ -840,8 +801,7 @@ bool TorrentHandle::hasError() const
bool TorrentHandle::hasFilteredPieces() const
{
std::vector<int> pp;
SAFE_GET(pp, piece_priorities);
std::vector<int> pp = m_nativeHandle.piece_priorities();
foreach (const int priority, pp)
if (priority == 0) return true;
@@ -914,7 +874,7 @@ QVector<qreal> TorrentHandle::filesProgress() const
{
std::vector<boost::int64_t> fp;
QVector<qreal> result;
SAFE_CALL(file_progress, fp, libt::torrent_handle::piece_granularity);
m_nativeHandle.file_progress(fp, libt::torrent_handle::piece_granularity);
int count = static_cast<int>(fp.size());
for (int i = 0; i < count; ++i) {
@@ -1007,12 +967,12 @@ int TorrentHandle::timeSinceActivity() const
int TorrentHandle::downloadLimit() const
{
SAFE_RETURN(int, download_limit, -1)
return m_nativeHandle.download_limit();
}
int TorrentHandle::uploadLimit() const
{
SAFE_RETURN(int, upload_limit, -1)
return m_nativeHandle.upload_limit();
}
bool TorrentHandle::superSeeding() const
@@ -1025,7 +985,7 @@ QList<PeerInfo> TorrentHandle::peers() const
QList<PeerInfo> peers;
std::vector<libt::peer_info> nativePeers;
SAFE_CALL(get_peer_info, nativePeers);
m_nativeHandle.get_peer_info(nativePeers);
foreach (const libt::peer_info &peer, nativePeers)
peers << PeerInfo(this, peer);
@@ -1048,7 +1008,7 @@ QBitArray TorrentHandle::downloadingPieces() const
QBitArray result(piecesCount());
std::vector<libt::partial_piece_info> queue;
SAFE_CALL(get_download_queue, queue);
m_nativeHandle.get_download_queue(queue);
std::vector<libt::partial_piece_info>::const_iterator it = queue.begin();
std::vector<libt::partial_piece_info>::const_iterator itend = queue.end();
@@ -1061,7 +1021,7 @@ QBitArray TorrentHandle::downloadingPieces() const
QVector<int> TorrentHandle::pieceAvailability() const
{
std::vector<int> avail;
SAFE_CALL(piece_availability, avail);
m_nativeHandle.piece_availability(avail);
return QVector<int>::fromStdVector(avail);
}
@@ -1206,12 +1166,12 @@ void TorrentHandle::move_impl(QString path)
void TorrentHandle::forceReannounce(int index)
{
SAFE_CALL(force_reannounce, 0, index);
m_nativeHandle.force_reannounce(0, index);
}
void TorrentHandle::forceDHTAnnounce()
{
SAFE_CALL(force_dht_announce);
m_nativeHandle.force_dht_announce();
}
void TorrentHandle::forceRecheck()
@@ -1223,13 +1183,13 @@ void TorrentHandle::forceRecheck()
resume();
}
SAFE_CALL(force_recheck);
m_nativeHandle.force_recheck();
}
void TorrentHandle::setSequentialDownload(bool b)
{
if (b != isSequentialDownload()) {
SAFE_CALL(set_sequential_download, b);
m_nativeHandle.set_sequential_download(b);
m_nativeStatus.sequential_download = b; // prevent return cached value
}
}
@@ -1243,10 +1203,8 @@ void TorrentHandle::setFirstLastPiecePriority(bool b)
{
if (!hasMetadata()) return;
std::vector<int> fp;
SAFE_GET(fp, file_priorities);
std::vector<int> pp;
SAFE_GET(pp, piece_priorities);
std::vector<int> fp = m_nativeHandle.file_priorities();
std::vector<int> pp = m_nativeHandle.piece_priorities();
// Download first and last pieces first for all media files in the torrent
int nbfiles = static_cast<int>(fp.size());
@@ -1270,7 +1228,7 @@ void TorrentHandle::setFirstLastPiecePriority(bool b)
}
}
SAFE_CALL(prioritize_pieces, pp);
m_nativeHandle.prioritize_pieces(pp);
}
void TorrentHandle::toggleFirstLastPiecePriority()
@@ -1282,28 +1240,18 @@ void TorrentHandle::pause()
{
if (isPaused()) return;
try {
m_nativeHandle.auto_managed(false);
m_nativeHandle.pause();
}
catch (std::exception &exc) {
qDebug() << Q_FUNC_INFO << " throws exception: " << exc.what();
}
m_nativeHandle.auto_managed(false);
m_nativeHandle.pause();
}
void TorrentHandle::resume(bool forced)
{
try {
if (hasError())
m_nativeHandle.clear_error();
m_hasMissingFiles = false;
m_nativeHandle.set_upload_mode(false);
m_nativeHandle.auto_managed(!forced);
m_nativeHandle.resume();
}
catch (std::exception &exc) {
qDebug() << Q_FUNC_INFO << " throws exception: " << exc.what();
}
if (hasError())
m_nativeHandle.clear_error();
m_hasMissingFiles = false;
m_nativeHandle.set_upload_mode(false);
m_nativeHandle.auto_managed(!forced);
m_nativeHandle.resume();
}
void TorrentHandle::moveStorage(const QString &newPath)
@@ -1317,28 +1265,24 @@ void TorrentHandle::moveStorage(const QString &newPath)
if (QDir(oldPath) == QDir(newPath)) return;
qDebug("move storage: %s to %s", qPrintable(oldPath), qPrintable(newPath));
try {
// Actually move the storage
m_nativeHandle.move_storage(newPath.toUtf8().constData());
m_oldPath = oldPath;
m_newPath = newPath;
}
catch (std::exception &exc) {
qDebug("torrent_handle::move_storage() throws exception: %s", exc.what());
}
// Actually move the storage
m_nativeHandle.move_storage(newPath.toUtf8().constData());
m_oldPath = oldPath;
m_newPath = newPath;
}
}
void TorrentHandle::setTrackerLogin(const QString &username, const QString &password)
{
SAFE_CALL(set_tracker_login, std::string(username.toLocal8Bit().constData()), std::string(password.toLocal8Bit().constData()));
m_nativeHandle.set_tracker_login(std::string(username.toLocal8Bit().constData())
, std::string(password.toLocal8Bit().constData()));
}
void TorrentHandle::renameFile(int index, const QString &name)
{
++m_renameCount;
qDebug() << Q_FUNC_INFO << index << name;
SAFE_CALL(rename_file, index, Utils::String::toStdString(Utils::Fs::toNativePath(name)));
m_nativeHandle.rename_file(index, Utils::String::toStdString(Utils::Fs::toNativePath(name)));
}
bool TorrentHandle::saveTorrentFile(const QString &path)
@@ -1359,8 +1303,7 @@ bool TorrentHandle::saveTorrentFile(const QString &path)
void TorrentHandle::setFilePriority(int index, int priority)
{
std::vector<int> priorities;
SAFE_GET(priorities, file_priorities);
std::vector<int> priorities = m_nativeHandle.file_priorities();
if ((priorities.size() > static_cast<quint64>(index)) && (priorities[index] != priority)) {
priorities[index] = priority;
@@ -1805,10 +1748,7 @@ bool TorrentHandle::useTempPath() const
void TorrentHandle::updateStatus()
{
libt::torrent_status status;
SAFE_GET(status, status);
updateStatus(status);
updateStatus(m_nativeHandle.status());
}
void TorrentHandle::updateStatus(const libtorrent::torrent_status &nativeStatus)
@@ -1835,24 +1775,24 @@ void TorrentHandle::setRatioLimit(qreal limit)
void TorrentHandle::setUploadLimit(int limit)
{
SAFE_CALL(set_upload_limit, limit)
m_nativeHandle.set_upload_limit(limit);
}
void TorrentHandle::setDownloadLimit(int limit)
{
SAFE_CALL(set_download_limit, limit)
m_nativeHandle.set_download_limit(limit);
}
void TorrentHandle::setSuperSeeding(bool enable)
{
SAFE_CALL(super_seeding, enable)
m_nativeHandle.super_seeding(enable);
if (superSeeding() != enable)
updateStatus();
}
void TorrentHandle::flushCache()
{
SAFE_CALL(flush_cache)
m_nativeHandle.flush_cache();
}
QString TorrentHandle::toMagnetUri() const
@@ -1880,7 +1820,7 @@ void TorrentHandle::prioritizeFiles(const QVector<int> &priorities)
}
qDebug() << Q_FUNC_INFO << "Changing files priorities...";
SAFE_CALL(prioritize_files, priorities.toStdVector());
m_nativeHandle.prioritize_files(priorities.toStdVector());
qDebug() << Q_FUNC_INFO << "Moving unwanted files to .unwanted folder and conversely...";
QString spath = savePath(true);

View File

@@ -28,14 +28,18 @@
* exception statement from your version.
*/
#include "server.h"
#include <QNetworkProxy>
#include <QStringList>
#ifndef QT_NO_OPENSSL
#include <QSslSocket>
#else
#include <QTcpSocket>
#endif
#include <QNetworkProxy>
#include "connection.h"
#include "server.h"
using namespace Http;

View File

@@ -80,7 +80,7 @@ void DNSUpdater::checkPublicIP()
DownloadHandler *handler = DownloadManager::instance()->downloadUrl(
"http://checkip.dyndns.org", false, 0, false,
QString("qBittorrent/%1").arg(VERSION));
"qBittorrent/" QBT_VERSION_2);
connect(handler, SIGNAL(downloadFinished(QString, QByteArray)), SLOT(ipRequestFinished(QString, QByteArray)));
connect(handler, SIGNAL(downloadFailed(QString, QString)), SLOT(ipRequestFailed(QString, QString)));
@@ -127,7 +127,7 @@ void DNSUpdater::updateDNSService()
m_lastIPCheckTime = QDateTime::currentDateTime();
DownloadHandler *handler = DownloadManager::instance()->downloadUrl(
getUpdateUrl(), false, 0, false,
QString("qBittorrent/%1").arg(VERSION));
"qBittorrent/" QBT_VERSION_2);
connect(handler, SIGNAL(downloadFinished(QString, QByteArray)), SLOT(ipUpdateFinished(QString, QByteArray)));
connect(handler, SIGNAL(downloadFailed(QString, QString)), SLOT(ipUpdateFailed(QString, QString)));
}

75
src/base/utils/random.cpp Normal file
View File

@@ -0,0 +1,75 @@
/*
* Bittorrent Client using Qt and libtorrent.
* Copyright (C) 2017 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.
*
*/
#include "random.h"
#include <cassert>
#include <chrono>
#include <random>
#include <QtGlobal>
#ifdef Q_OS_MAC
#include <QThreadStorage>
#endif
// on some platform `std::random_device` may generate the same number sequence
static bool hasTrueRandomDevice{ std::random_device{}() != std::random_device{}() };
uint32_t Utils::Random::rand(const uint32_t min, const uint32_t max)
{
#ifdef Q_OS_MAC // workaround for Apple xcode: https://stackoverflow.com/a/29929949
static QThreadStorage<std::mt19937> generator;
if (!generator.hasLocalData())
generator.localData().seed(
hasTrueRandomDevice
? std::random_device{}()
: (std::random_device::result_type) std::chrono::system_clock::now().time_since_epoch().count()
);
#else
static thread_local std::mt19937 generator{
hasTrueRandomDevice
? std::random_device{}()
: (std::random_device::result_type) std::chrono::system_clock::now().time_since_epoch().count()
};
#endif
// better replacement for `std::rand`, don't use this for real cryptography application
// min <= returned_value <= max
assert(min <= max);
// new distribution is cheap: http://stackoverflow.com/a/19036349
std::uniform_int_distribution<uint32_t> uniform(min, max);
#ifdef Q_OS_MAC
return uniform(generator.localData());
#else
return uniform(generator);
#endif
}

44
src/base/utils/random.h Normal file
View File

@@ -0,0 +1,44 @@
/*
* Bittorrent Client using Qt and libtorrent.
* Copyright (C) 2017 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.
*
*/
#ifndef UTILS_RANDOM_H
#define UTILS_RANDOM_H
#include <cstdint>
#include <cstdlib>
namespace Utils
{
namespace Random
{
uint32_t rand(uint32_t min = 0, uint32_t max = UINT32_MAX);
}
}
#endif // UTILS_FS_H

View File

@@ -34,6 +34,7 @@
#include <QByteArray>
#include <QtGlobal>
#include <QLocale>
#ifdef QBT_USES_QT5
#include <QCollator>
#endif
@@ -217,6 +218,23 @@ QString Utils::String::toHtmlEscaped(const QString &str)
#ifdef QBT_USES_QT5
return str.toHtmlEscaped();
#else
return Qt::escape(str);
// code from Qt
QString rich;
const int len = str.length();
rich.reserve(int(len * 1.1));
for (int i = 0; i < len; ++i) {
if (str.at(i) == QLatin1Char('<'))
rich += QLatin1String("&lt;");
else if (str.at(i) == QLatin1Char('>'))
rich += QLatin1String("&gt;");
else if (str.at(i) == QLatin1Char('&'))
rich += QLatin1String("&amp;");
else if (str.at(i) == QLatin1Char('"'))
rich += QLatin1String("&quot;");
else
rich += str.at(i);
}
rich.squeeze();
return rich;
#endif
}

View File

@@ -47,7 +47,11 @@ public:
setAttribute(Qt::WA_DeleteOnClose);
// Title
lb_name->setText("<b><h2>qBittorrent " VERSION "</h2></b>");
#if defined(__x86_64__) || defined(_M_X64)
lb_name->setText("<b><h2>qBittorrent " QBT_VERSION " (64-bit)</h2></b>");
#else
lb_name->setText("<b><h2>qBittorrent " QBT_VERSION " (32-bit)</h2></b>");
#endif
// About
QString aboutText = QString(

View File

@@ -211,7 +211,7 @@ QVariant CategoryFilterModel::data(const QModelIndex &index, int role) const
}
if ((index.column() == 0) && (role == Qt::DisplayRole)) {
return QString(QStringLiteral("%1 (%2)"))
return QString(QStringLiteral("%1 (%2)"))
.arg(item->name()).arg(item->torrentsCount());
}

View File

@@ -139,7 +139,7 @@ MainWindow::MainWindow(QWidget *parent)
Preferences *const pref = Preferences::instance();
m_uiLocked = pref->isUILocked();
setWindowTitle("qBittorrent " VERSION);
setWindowTitle("qBittorrent " QBT_VERSION);
m_displaySpeedInTitle = pref->speedInTitleBar();
// Setting icons
#if (defined(Q_OS_UNIX) && !defined(Q_OS_MAC))
@@ -1332,7 +1332,7 @@ void MainWindow::updateGUI()
setWindowTitle(tr("[D: %1, U: %2] qBittorrent %3", "D = Download; U = Upload; %3 is qBittorrent version")
.arg(Utils::Misc::friendlyUnit(status.payloadDownloadRate(), true))
.arg(Utils::Misc::friendlyUnit(status.payloadUploadRate(), true))
.arg(VERSION));
.arg(QBT_VERSION));
}
}
@@ -1495,7 +1495,7 @@ void MainWindow::on_actionSpeedInTitleBar_triggered()
if (m_displaySpeedInTitle)
updateGUI();
else
setWindowTitle("qBittorrent " VERSION);
setWindowTitle("qBittorrent " QBT_VERSION);
}
void MainWindow::on_actionRSSReader_triggered()

View File

@@ -58,6 +58,7 @@
#include "base/torrentfileguard.h"
#include "base/unicodestrings.h"
#include "base/utils/fs.h"
#include "base/utils/random.h"
#include "addnewtorrentdialog.h"
#include "advancedsettings.h"
#include "guiiconprovider.h"
@@ -1002,7 +1003,7 @@ int OptionsDialog::getPort() const
void OptionsDialog::on_randomButton_clicked()
{
// Range [1024: 65535]
m_ui->spinPort->setValue(rand() % 64512 + 1024);
m_ui->spinPort->setValue(Utils::Random::rand(1024, 65535));
}
int OptionsDialog::getEncryptionSetting() const

View File

@@ -66,7 +66,7 @@ void ProgramUpdater::checkForUpdates()
RSS_URL, false, 0, false,
// Don't change this User-Agent. In case our updater goes haywire,
// the filehost can identify it and contact us.
QString("qBittorrent/%1 ProgramUpdater (www.qbittorrent.org)").arg(VERSION));
"qBittorrent/" QBT_VERSION_2 " ProgramUpdater (www.qbittorrent.org)");
connect(handler, SIGNAL(downloadFinished(QString,QByteArray)), SLOT(rssDownloadFinished(QString,QByteArray)));
connect(handler, SIGNAL(downloadFailed(QString,QString)), SLOT(rssDownloadFailed(QString,QString)));
}
@@ -137,9 +137,9 @@ void ProgramUpdater::updateProgram()
bool ProgramUpdater::isVersionMoreRecent(const QString &remoteVersion) const
{
QRegExp regVer("([0-9.]+)");
if (regVer.indexIn(QString(VERSION)) >= 0) {
if (regVer.indexIn(QBT_VERSION) >= 0) {
QString localVersion = regVer.cap(1);
qDebug() << Q_FUNC_INFO << "local version:" << localVersion << "/" << VERSION;
qDebug() << Q_FUNC_INFO << "local version:" << localVersion << "/" << QBT_VERSION;
QStringList remoteParts = remoteVersion.split('.');
QStringList localParts = localVersion.split('.');
for (int i = 0; i<qMin(remoteParts.size(), localParts.size()); ++i) {
@@ -153,7 +153,7 @@ bool ProgramUpdater::isVersionMoreRecent(const QString &remoteVersion) const
return true;
// versions are equal, check if the local version is a development release, in which case it is older (2.9.2beta < 2.9.2)
QRegExp regDevel("(alpha|beta|rc)");
if (regDevel.indexIn(VERSION) >= 0)
if (regDevel.indexIn(QBT_VERSION) >= 0)
return true;
}
return false;

View File

@@ -48,6 +48,7 @@
#include "transferlistwidget.h"
#include "base/bittorrent/session.h"
#include "base/bittorrent/torrenthandle.h"
#include "base/logger.h"
#include "base/torrentfilter.h"
#include "transferlistdelegate.h"
#include "previewselect.h"
@@ -260,12 +261,14 @@ void TransferListWidget::setSelectedTorrentsLocation()
const QString newLocation = QFileDialog::getExistingDirectory(this, tr("Choose save path"), oldLocation,
QFileDialog::DontConfirmOverwrite | QFileDialog::ShowDirsOnly | QFileDialog::HideNameFilterDetails);
if (!QDir(newLocation).exists()) return;
if (newLocation.isEmpty() || !QDir(newLocation).exists()) return;
qDebug("New location is %s", qPrintable(newLocation));
// Actually move storage
foreach (BitTorrent::TorrentHandle *const torrent, torrents)
foreach (BitTorrent::TorrentHandle *const torrent, torrents) {
Logger::instance()->addMessage(tr("Set location: moving \"%1\", from \"%2\" to \"%3\"", "Set location: moving \"ubuntu_16_04.iso\", from \"/home/dir1\" to \"/home/dir2\"").arg(torrent->name()).arg(torrent->savePath()).arg(newLocation));
torrent->move(Utils::Fs::expandPathAbs(newLocation));
}
}
void TransferListWidget::pauseAllTorrents()

View File

@@ -10,18 +10,33 @@ Terminal=false
Type=Application
StartupNotify=false
StartupWMClass=qbittorrent
Keywords=bittorrent;torrent;magnet;download;p2p;
# Translations
Comment[oc]=Telecargar e partejar de fichièrs amb BitTorrent
GenericName[oc]=Client BitTorrent
Name[oc]=qBittorrent
Comment[af]=Aflaai en deel lêers oor BitTorrent
GenericName[af]=BitTorrent kliënt
Name[af]=qBittorrent
Comment[ar]=نزّل وشارك الملفات عبر كيوبت‎تورنت
GenericName[ar]=عميل بت تورنت
GenericName[ar]=عميل بتتورنت
Name[ar]=كيوبت‎تورنت
Comment[be]=Сцягванне і раздача файлаў праз пратакол BitTorrent
GenericName[be]=BitTorrent-кліент
Name[be]=qBittorrent
GenericName[bg]=Торент клиент
Comment[bn]=ডাউনলোড করুন এবং ফাইল শেয়ার করুন
GenericName[bn]=কিউবিটরেন্ট ক্লায়েন্ট
Name[bn]=কিউবিটরেন্ট
Comment[bg]=Сваляне и споделяне на файлове чрез BitTorrent
GenericName[bg]=BitTorrent клиент
Name[bg]=qBittorrent
Comment[bn]=বিটরেন্টে ফাইল ডাউনলোড এবং শেয়ার করুন
GenericName[bn]=বিটটরেন্ট ক্লায়েন্ট
Name[bn]=কিউবি্টটরেন্ট
Comment[bs]=Preuzmi i dijeli datoteke preko BitTorrent-a
GenericName[bs]=BitTorrent klijent
Name[bs]=qBittorrent
Comment[ca]=Baixeu i compartiu fitxers mitjançant BitTorrent
GenericName[ca]=Client de BitTorrent
Name[ca]=qBittorrent
Comment[cs]=Stahování a sdílení souborů přes síť BitTorrent
GenericName[cs]=BitTorrent klient
Name[cs]=qBittorrent
@@ -31,8 +46,8 @@ Name[da]=qBittorrent
Comment[de]=Über BitTorrent Dateien herunterladen und teilen
GenericName[de]=BitTorrent Client
Name[de]=qBittorrent
Comment[el]=Λήψη και διαμοιρασμός αρχείων μέσω BitTorrent
GenericName[el]=BitTorrent πελάτης
Comment[el]=Κάντε λήψη και ανταλάξτε αρχεία μέσω BitTorrent
GenericName[el]=Πελάτης BitTorrent
Name[el]=qBittorrent
Comment[en_GB]=Download and share files over BitTorrent
GenericName[en_GB]=BitTorrent client
@@ -43,19 +58,36 @@ Name[es]=qBittorrent
Comment[eu]=Jeitsi eta elkarbanatu agiriak BitTorrent-en
GenericName[eu]=BitTorrent bezeroa
Name[eu]=qBittorrent
Comment[fa]=دانلود و به اشتراک گذاری فایل های بوسیله بیت تورنت
GenericName[fa]=بیت تورنت نسخه کلاینت
Name[fa]=کیو بیت تورنت
Comment[fi]=Lataa ja jaa tiedostoja BitTorrentia käyttäen
GenericName[fi]=BitTorrent-ohjelma
GenericName[fi]=BitTorrent-asiakasohjelma
Name[fi]=qBittorrent
Comment[fr]=Télécharger et partager des fichiers avec BitTorrent
GenericName[fr]=Client BitTorrent
Name[fr]=qBittorrent
Comment[gl]=Descargue e comparta ficheiros co protocolo BitTorrent
Comment[gl]=Descargar e compartir ficheiros co protocolo BitTorrent
GenericName[gl]=Cliente BitTorrent
Name[gl]=qBittorrent
Comment[gu]=બિટ્ટોરેંટ પર ફાઈલો ડાઉનલોડ અને શેર કરો
GenericName[gu]=બિટ્ટોરેંટ ક્લાયન્ટ
Name[gu]=ક્યૂ-બિટ્ટોરેંટ
Comment[he]=הורד ושתף קבצים על גבי ביטורנט
GenericName[he]=לקוח ביטורנט
Name[he]=qBittorrent
Comment[hr]=Preuzmite i dijelite datoteke putem BitTorrenta
GenericName[hr]=BitTorrent klijent
Name[hr]=qBittorrent
Comment[hu]=Fájlok letöltése és megosztása a BitTorrent hálózaton keresztül
GenericName[hu]=BitTorrent kliens
Name[hu]=qBittorrent
Comment[id]=Unduh dan berbagi berkas melalui BitTorrent
GenericName[id]=Klien BitTorrent
Name[id]=qBittorrent
Comment[is]=Sækja og deila skrám yfir BitTorrent
GenericName[is]=BitTorrent biðlarar
Name[is]=qBittorrent
Comment[it]=Client BitTorrent per il download di file via internet
GenericName[it]=Client BitTorrent
Name[it]=qBittorrent
@@ -65,9 +97,9 @@ Name[ja]=qBittorrent
Comment[ka]=ჩამოტვირთე და გააზიარე ფაილები Bittorrent-ის საშუალებით
GenericName[ka]=BitTorrent კლიენტი
Name[ka]=qBittorrent
Comment[ko]=비트 토렌트를 통해 파일을 다운로드하고 공유합니다
GenericName[ko]=비트 토렌트 클라이언트
Name[ko]=큐빗 토렌
Comment[ko]=비트토런트를 통해 파일을 다운로드하고 공유합니다
GenericName[ko]=비트토런트 클라이언트
Name[ko]=큐빗토런
Comment[zh]=通过 BitTorrent 下载和分享文件
GenericName[zh]=BitTorrent 客户端
Name[zh]=qBittorrent
@@ -87,16 +119,16 @@ Comment[pl]=Pobieraj i dziel się plikami przez BitTorrent
GenericName[pl]=Klient BitTorrent
Name[pl]=qBittorrent
Comment[pt]=Transferir e partilhar ficheiros por BitTorrent
GenericName[pt]=Aplicação BitTorrent
GenericName[pt]=Cliente BitTorrent
Name[pt]=qBittorrent
Comment[pt_BR]=Baixe e compartilhe arquivos através do qBittorrent
Comment[pt_BR]=Baixe e compartilhe arquivos por BitTorrent
GenericName[pt_BR]=Cliente BitTorrent
Name[pt_BR]=qBittorrent
Comment[ro]=Descărcați și partajați fișiere prin BitTorrent
GenericName[ro]=Client BitTorrent
Name[ro]=qBittorrent
Comment[ru]=Скачивайте и делитесь файлами с помощью BitTorrent
GenericName[ru]=клиент BitTorrent
GenericName[ru]=BitTorrent-клиент
Name[ru]=qBittorrent
Comment[sk]=Sťahovanie a zdieľanie súborov prostredníctvom siete BitTorrent
GenericName[sk]=Klient siete BitTorrent
@@ -105,13 +137,22 @@ Comment[sl]=Prenesite in delite datoteke preko BitTorrenta
GenericName[sl]=BitTorrent odjemalec
Name[sl]=qBittorrent
GenericName[sr]=BitTorrent-клијент
Comment[sr@latin]=Preuzimanje i deljenje fajlova preko BitTorrent-a
GenericName[sr@latin]=BitTorrent klijent
Name[sr@latin]=qBittorrent
Comment[sv]=Hämta och dela filer över BitTorrent
GenericName[sv]=BitTorrent-klient
Name[sv]=qBittorrent
Comment[uz@Latn]=BitTorrent orqali fayllarni yuklab olish va baham korish
GenericName[uz@Latn]=BitTorrent mijozi
Name[uz@Latn]=qBittorrent
Comment[te]=క్యు బిట్ టొరెంట్ తో ఫైల్స్ దిగుమతి చేసుకోండి , పంచుకోండి
GenericName[te]=క్యు బిట్ టొరెంట్ క్లయింట్
Name[te]=క్యు బిట్ టొరెంట్
Comment[hi_IN]= अपनी फाइलें BitTorrent के माध्यम से डाउनलोड आैर साॅझा करें
GenericName[hi_IN]=BitTorrent उपभोक्ता
Name[hi_IN]=qBittorrent
Comment[tr]=Dosyaları BitTorrent üzerinden indir ve paylaş
Comment[tr]=Dosyaları BitTorrent üzerinden indirin ve paylaşın
GenericName[tr]=BitTorrent istemcisi
Name[tr]=qBittorrent
Comment[uk]=Завантажувати і обмінюватися файлами через BitTorrent
@@ -120,9 +161,30 @@ Name[uk]=qBittorrent
Comment[vi]=Tải về và chia sẻ các tập tin thông qua BitTorrent
GenericName[vi]=Máy trạm dạng BitTorrent
Name[vi]=qBittorrent
Comment[zh_HK]=經由BitTorrent下載並分享檔案
GenericName[zh_HK]=BitTorrent用戶端
Name[zh_HK]=qBittorrent
Comment[zh_TW]=經由 BitTorrent 下載並分享檔案
GenericName[zh_TW]=BitTorrent 客戶端
Name[zh_TW]=qBittorrent
Comment[lv_LV]=Lejupielādēt un koplietot failus ar BitTorrent
GenericName[lv_LV]=BitTorrent klients
Name[lv_LV]=qBittorrent
Comment[ms_MY]=Muat turun dan kongsi fail melalui BitTorrent
GenericName[ms_MY]=Klien BitTorrent
Name[ms_MY]=qBittorrent
Comment[eo]=Elŝutu kaj kunhavigu dosierojn per BitTorrent
GenericName[eo]=BitTorrent-kliento
Name[eo]=qBittorrent
Comment[mn_MN]=BitTorrent ашиглан файлуудыг татаж түгээх
GenericName[mn_MN]=BitTorrent үйлчлүүлэгч
Name[mn_MN]=qBittorrent
Comment[ne_NP]=फाइलहरू डाउनलोड गर्नुहोस् र BitTorrent मा साझा गर्नुहोस्
GenericName[ne_NP]=BitTorrent क्लाइन्ट
Name[ne_NP]=qBittorrent
Comment[en_AU]=Download and share files over BitTorrent
GenericName[en_AU]=BitTorrent client
Name[en_AU]=qBittorrent
Comment[th]=ดาว์นโหลดและแชร์ไฟล์ด้วยบิททอเร้น
GenericName[th]=โปรแกรมบิททอเร้น
Name[th]=qBittorrent

View File

@@ -1,8 +1,39 @@
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
<dependency>
<dependentAssembly>
<assemblyIdentity type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*' />
</dependentAssembly>
</dependency>
</assembly>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" manifestVersion="1.0">
<!-- Enable use of version 6 of the common controls (Win XP and later) -->
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*" />
</dependentAssembly>
</dependency>
<!-- Indicate UAC compliance, with no need for elevated privileges (Win Vista and later) -->
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
<!-- Declare support for various versions of Windows -->
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- Windows Vista -->
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />
<!-- Windows 7 -->
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />
<!-- Windows 8 -->
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />
<!-- Windows 8.1 -->
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />
<!-- Windows 10 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
</application>
</compatibility>
</assembly>

Binary file not shown.

View File

@@ -26,6 +26,8 @@
* exception statement from your version.
*/
#include "abstractwebapplication.h"
#include <QCoreApplication>
#include <QDateTime>
#include <QDebug>
@@ -37,8 +39,8 @@
#include "base/preferences.h"
#include "base/utils/fs.h"
#include "base/utils/random.h"
#include "websessiondata.h"
#include "abstractwebapplication.h"
// UnbanTimer
@@ -85,8 +87,8 @@ AbstractWebApplication::AbstractWebApplication(QObject *parent)
, session_(0)
{
QTimer *timer = new QTimer(this);
timer->setInterval(60000); // 1 min.
connect(timer, SIGNAL(timeout()), SLOT(removeInactiveSessions()));
timer->start(60 * 1000); // 1 min.
}
AbstractWebApplication::~AbstractWebApplication()
@@ -204,7 +206,7 @@ bool AbstractWebApplication::readFile(const QString& path, QByteArray &data, QSt
translateDocument(dataStr);
if (path.endsWith("about.html") || path.endsWith("index.html") || path.endsWith("client.js"))
dataStr.replace("${VERSION}", VERSION);
dataStr.replace("${VERSION}", QBT_VERSION);
data = dataStr.toUtf8();
translatedFiles_[path] = data; // cashing translated file
@@ -226,13 +228,12 @@ QString AbstractWebApplication::generateSid()
{
QString sid;
qsrand(QDateTime::currentDateTime().toTime_t());
do {
const size_t size = 6;
quint32 tmp[size];
for (size_t i = 0; i < size; ++i)
tmp[i] = qrand();
tmp[i] = Utils::Random::rand();
sid = QByteArray::fromRawData(reinterpret_cast<const char *>(tmp), sizeof(quint32) * size).toBase64();
}
@@ -361,6 +362,7 @@ bool AbstractWebApplication::sessionStart()
sessions_[session_->id] = session_;
QNetworkCookie cookie(C_SID, session_->id.toUtf8());
cookie.setHttpOnly(true);
cookie.setPath(QLatin1String("/"));
header(Http::HEADER_SET_COOKIE, cookie.toRawForm());
@@ -373,9 +375,9 @@ bool AbstractWebApplication::sessionStart()
bool AbstractWebApplication::sessionEnd()
{
if ((session_ != 0) && (sessions_.contains(session_->id))) {
QNetworkCookie cookie(C_SID, session_->id.toUtf8());
QNetworkCookie cookie(C_SID);
cookie.setPath(QLatin1String("/"));
cookie.setExpirationDate(QDateTime::currentDateTime());
cookie.setExpirationDate(QDateTime::currentDateTime().addDays(-1));
sessions_.remove(session_->id);
delete session_;

View File

@@ -29,12 +29,13 @@
#ifndef ABSTRACTWEBAPPLICATION_H
#define ABSTRACTWEBAPPLICATION_H
#include <QObject>
#include <QMap>
#include <QHash>
#include "base/http/types.h"
#include "base/http/responsebuilder.h"
#include <QMap>
#include <QObject>
#include "base/http/irequesthandler.h"
#include "base/http/responsebuilder.h"
#include "base/http/types.h"
struct WebSession;
struct WebSessionData;

View File

@@ -41,6 +41,7 @@
#include <QElapsedTimer>
#endif
#include "base/bittorrent/cachestatus.h"
#include "base/bittorrent/session.h"
#include "base/bittorrent/sessionstatus.h"
#include "base/bittorrent/peerinfo.h"
@@ -52,6 +53,7 @@
#include "base/torrentfilter.h"
#include "base/utils/fs.h"
#include "base/utils/misc.h"
#include "base/utils/string.h"
#include "jsonutils.h"
#if QT_VERSION >= QT_VERSION_CHECK(4, 7, 0)
@@ -119,7 +121,7 @@ static const char KEY_TORRENT_AMOUNT_DOWNLOADED[] = "downloaded";
static const char KEY_TORRENT_AMOUNT_UPLOADED[] = "uploaded";
static const char KEY_TORRENT_AMOUNT_DOWNLOADED_SESSION[] = "downloaded_session";
static const char KEY_TORRENT_AMOUNT_UPLOADED_SESSION[] = "uploaded_session";
static const char KEY_TORRENT_AMOUNT_LEFT[] = "remaining";
static const char KEY_TORRENT_AMOUNT_LEFT[] = "amount_left";
static const char KEY_TORRENT_AMOUNT_COMPLETED[] = "completed";
static const char KEY_TORRENT_RATIO_LIMIT[] = "ratio_limit";
static const char KEY_TORRENT_LAST_SEEN_COMPLETE_TIME[] = "seen_complete";
@@ -204,6 +206,20 @@ static const char KEY_TRANSFER_UPRATELIMIT[] = "up_rate_limit";
static const char KEY_TRANSFER_DHT_NODES[] = "dht_nodes";
static const char KEY_TRANSFER_CONNECTION_STATUS[] = "connection_status";
// Statistics keys
static const char KEY_TRANSFER_ALLTIME_DL[] = "alltime_dl";
static const char KEY_TRANSFER_ALLTIME_UL[] = "alltime_ul";
static const char KEY_TRANSFER_TOTAL_WASTE_SESSION[] = "total_wasted_session";
static const char KEY_TRANSFER_GLOBAL_RATIO[] = "global_ratio";
static const char KEY_TRANSFER_TOTAL_PEER_CONNECTIONS[] = "total_peer_connections";
static const char KEY_TRANSFER_READ_CACHE_HITS[] = "read_cache_hits";
static const char KEY_TRANSFER_TOTAL_BUFFERS_SIZE[] = "total_buffers_size";
static const char KEY_TRANSFER_WRITE_CACHE_OVERLOAD[] = "write_cache_overload";
static const char KEY_TRANSFER_READ_CACHE_OVERLOAD[] = "read_cache_overload";
static const char KEY_TRANSFER_QUEUED_IO_JOBS[] = "queued_io_jobs";
static const char KEY_TRANSFER_AVERAGE_TIME_QUEUE[] = "average_time_queue";
static const char KEY_TRANSFER_TOTAL_QUEUED_SIZE[] = "total_queued_size";
// Sync main data keys
static const char KEY_SYNC_MAINDATA_QUEUEING[] = "queueing";
static const char KEY_SYNC_MAINDATA_USE_ALT_SPEED_LIMITS[] = "use_alt_speed_limits";
@@ -711,12 +727,37 @@ QVariantMap getTranserInfoMap()
{
QVariantMap map;
BitTorrent::SessionStatus sessionStatus = BitTorrent::Session::instance()->status();
BitTorrent::CacheStatus cacheStatus = BitTorrent::Session::instance()->cacheStatus();
map[KEY_TRANSFER_DLSPEED] = sessionStatus.payloadDownloadRate();
map[KEY_TRANSFER_DLDATA] = sessionStatus.totalPayloadDownload();
map[KEY_TRANSFER_UPSPEED] = sessionStatus.payloadUploadRate();
map[KEY_TRANSFER_UPDATA] = sessionStatus.totalPayloadUpload();
map[KEY_TRANSFER_DLRATELIMIT] = BitTorrent::Session::instance()->downloadSpeedLimit();
map[KEY_TRANSFER_UPRATELIMIT] = BitTorrent::Session::instance()->uploadSpeedLimit();
quint64 atd = BitTorrent::Session::instance()->getAlltimeDL();
quint64 atu = BitTorrent::Session::instance()->getAlltimeUL();
map[KEY_TRANSFER_ALLTIME_DL] = atd;
map[KEY_TRANSFER_ALLTIME_UL] = atu;
map[KEY_TRANSFER_TOTAL_WASTE_SESSION] = sessionStatus.totalWasted();
map[KEY_TRANSFER_GLOBAL_RATIO] = ( atd > 0 && atu > 0 ) ? Utils::String::fromDouble((qreal)atu / (qreal)atd, 2) : "-";
map[KEY_TRANSFER_TOTAL_PEER_CONNECTIONS] = sessionStatus.peersCount();
qreal readRatio = cacheStatus.readRatio();
map[KEY_TRANSFER_READ_CACHE_HITS] = (readRatio >= 0) ? Utils::String::fromDouble(100 * readRatio, 2) : "-";
map[KEY_TRANSFER_TOTAL_BUFFERS_SIZE] = cacheStatus.totalUsedBuffers() * 16 * 1024;
// num_peers is not reliable (adds up peers, which didn't even overcome tcp handshake)
quint32 peers = 0;
foreach (BitTorrent::TorrentHandle *const torrent, BitTorrent::Session::instance()->torrents())
peers += torrent->peersCount();
map[KEY_TRANSFER_WRITE_CACHE_OVERLOAD] = ((sessionStatus.diskWriteQueue() > 0) && (peers > 0)) ? Utils::String::fromDouble((100. * sessionStatus.diskWriteQueue()) / peers, 2) : "0";
map[KEY_TRANSFER_READ_CACHE_OVERLOAD] = ((sessionStatus.diskReadQueue() > 0) && (peers > 0)) ? Utils::String::fromDouble((100. * sessionStatus.diskReadQueue()) / peers, 2) : "0";
map[KEY_TRANSFER_QUEUED_IO_JOBS] = cacheStatus.jobQueueLength();
map[KEY_TRANSFER_AVERAGE_TIME_QUEUE] = cacheStatus.averageJobTime();
map[KEY_TRANSFER_TOTAL_QUEUED_SIZE] = cacheStatus.queuedBytes();
map[KEY_TRANSFER_DHT_NODES] = sessionStatus.dhtNodes();
if (!BitTorrent::Session::instance()->isListening())
map[KEY_TRANSFER_CONNECTION_STATUS] = "disconnected";

View File

@@ -49,8 +49,8 @@
#include "websessiondata.h"
#include "webapplication.h"
static const int API_VERSION = 12;
static const int API_VERSION_MIN = 11;
static const int API_VERSION = 13;
static const int API_VERSION_MIN = 13;
const QString WWW_FOLDER = ":/www/public/";
const QString PRIVATE_FOLDER = ":/www/private/";
@@ -348,7 +348,7 @@ void WebApplication::action_version_api_min()
void WebApplication::action_version_qbittorrent()
{
CHECK_URI(0);
print(QString(VERSION), Http::CONTENT_TYPE_TXT);
print(QString(QBT_VERSION), Http::CONTENT_TYPE_TXT);
}
void WebApplication::action_command_shutdown()

View File

@@ -35,6 +35,7 @@
<file>www/public/scripts/prop-trackers.js</file>
<file>www/public/scripts/prop-webseeds.js</file>
<file>www/public/scripts/prop-files.js</file>
<file>www/public/statistics.html</file>
<file>www/public/transferlist.html</file>
<file>www/public/upload.html</file>
<file>www/public/uploadlimit.html</file>

View File

@@ -63,6 +63,7 @@
<ul>
<li><a id="showTopToolbarLink"><img class="MyMenuIcon" src="theme/checked" alt="QBT_TR(&Top Toolbar)QBT_TR" width="16" height="16" onload="fixPNG(this)"/>QBT_TR(&Top Toolbar)QBT_TR</a></li>
<li><a id="speedInBrowserTitleBarLink"><img class="MyMenuIcon" src="theme/checked" alt="QBT_TR(S&peed in Title Bar)QBT_TR" width="16" height="16" onload="fixPNG(this)"/>QBT_TR(S&peed in Title Bar)QBT_TR</a></li>
<li><a id=StatisticsLink ><img class="MyMenuIcon" src="theme/view-statistics" alt="QBT_TR(&About)QBT_TR" width="16" height="16" onload="fixPNG(this)"/>QBT_TR(&Statistics)QBT_TR</a></li>
</ul>
</li>
<li>

View File

@@ -367,6 +367,23 @@ window.addEvent('load', function () {
}else
document.title = "qBittorrent ${VERSION} QBT_TR(Web UI)QBT_TR";
$('DHTNodes').set('html', 'QBT_TR(DHT: %1 nodes)QBT_TR'.replace("%1", serverState.dht_nodes));
<!-- Statistics dialog -->
if (document.getElementById("statisticspage")) {
$('AlltimeDL').set('html', 'Alltime download: %1'.replace("%1", friendlyUnit(serverState.alltime_dl, false)));
$('AlltimeUL').set('html', 'Alltime upload: %1'.replace("%1", friendlyUnit(serverState.alltime_ul, false)));
$('TotalWastedSession').set('html', 'Total wasted (this session): %1'.replace("%1", friendlyUnit(serverState.total_wasted_session, false)));
$('GlobalRatio').set('html', 'Global ratio: %1'.replace("%1", serverState.global_ratio ));
$('TotalPeerConnections').set('html', 'Total peer connections: %1'.replace("%1", serverState.total_peer_connections ));
$('ReadCacheHits').set('html', 'Read cache hits: %1'.replace("%1", serverState.read_cache_hits ));
$('TotalBuffersSize').set('html', 'Total buffers size: %1'.replace("%1", friendlyUnit(serverState.total_buffers_size, false)));
$('WriteCacheOverload').set('html', 'Write cache overload: %1'.replace("%1", serverState.write_cache_overload ));
$('ReadCacheOverload').set('html', 'Read cache overload: %1'.replace("%1", serverState.read_cache_overload ));
$('QueuedIOJobs').set('html', 'Queued I/O jobs: %1'.replace("%1", serverState.queued_io_jobs ));
$('AverageTimeInQueue').set('html', 'Average time in queue: %1'.replace("%1", serverState.average_time_queue ));
$('TotalQueuedSize').set('html', 'Total queued size: %1'.replace("%1", friendlyUnit(serverState.total_queued_size, false) ));
}
if (serverState.connection_status == "connected")
$('connectionStatus').src = 'images/skin/connected.png';
else if (serverState.connection_status == "firewalled")
@@ -451,6 +468,8 @@ window.addEvent('load', function () {
processServerState();
});
$('StatisticsLink').addEvent('click', StatisticsLinkFN);
new MochaUI.Panel({
id : 'transferList',
title : 'Panel',

View File

@@ -32,6 +32,7 @@
**************************************************************/
var DynamicTableHeaderContextMenuClass = null;
var ProgressColumnWidth = -1;
var DynamicTable = new Class({
@@ -851,25 +852,34 @@ var TorrentsTable = new Class({
if (td.getChildren('div').length) {
var div = td.getChildren('div')[0];
var newWidth = td.offsetWidth - 5;
if (div.lastWidth !== newWidth) {
div.setWidth(newWidth);
div.lastWidth = newWidth;
if (td.resized) {
td.resized = false;
div.setWidth(ProgressColumnWidth - 5);
}
if (div.getValue() != progressFormated)
div.setValue(progressFormated);
}
else
else {
if (ProgressColumnWidth < 0)
ProgressColumnWidth = td.offsetWidth;
td.adopt(new ProgressBar(progressFormated.toFloat(), {
'width' : td.offsetWidth - 5
'width' : ProgressColumnWidth - 5
}));
td.resized = false;
}
};
this.columns['progress'].onResize = function (columnName) {
var pos = this.getColumnPos(columnName);
var trs = this.tableBody.getElements('tr');
for (var i = 0; i < trs.length; i++)
this.columns[columnName].updateTd(trs[i].getElements('td')[pos], this.rows.get(trs[i].rowId));
ProgressColumnWidth = -1;
for (var i = 0; i < trs.length; i++) {
var td = trs[i].getElements('td')[pos];
if (ProgressColumnWidth < 0)
ProgressColumnWidth = td.offsetWidth;
td.resized = true;
this.columns[columnName].updateTd(td, this.rows.get(trs[i].rowId));
}
}.bind(this);
// num_seeds

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