You've already forked qBittorrent
mirror of
https://github.com/qbittorrent/qBittorrent
synced 2025-10-23 22:32:16 +02:00
Compare commits
77 Commits
release-5.
...
release-4.
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
92f810873a | ||
|
|
6739f59e5f | ||
|
|
d6e888a877 | ||
|
|
1fb329c0ef | ||
|
|
ffe085dc8a | ||
|
|
267d504ec0 | ||
|
|
b824889d07 | ||
|
|
59d968e116 | ||
|
|
43300d97e2 | ||
|
|
3007762864 | ||
|
|
786c09e981 | ||
|
|
2c2252d7d9 | ||
|
|
c7dfc1ded2 | ||
|
|
c2dd53cee6 | ||
|
|
903173b8f1 | ||
|
|
837d39dac7 | ||
|
|
54dffa1051 | ||
|
|
a14b50e48c | ||
|
|
b284d40430 | ||
|
|
ee853d8751 | ||
|
|
d5c0c094f2 | ||
|
|
3c0747fb87 | ||
|
|
31e0ab2c70 | ||
|
|
bb6d69f8b7 | ||
|
|
a396e0df26 | ||
|
|
a1317e24f9 | ||
|
|
42d7465cba | ||
|
|
4b56bdd36f | ||
|
|
dc31e82d00 | ||
|
|
7b73d3fb5c | ||
|
|
6b3da26af8 | ||
|
|
488c022d89 | ||
|
|
d512d6dead | ||
|
|
a1ff1c8227 | ||
|
|
7bc49423c7 | ||
|
|
3d3ce1c5d7 | ||
|
|
832d68d5cb | ||
|
|
ec8802203d | ||
|
|
4beee27701 | ||
|
|
716aca17f8 | ||
|
|
d85ed84e83 | ||
|
|
20985f9960 | ||
|
|
e6cde0b4b4 | ||
|
|
a84259dd1a | ||
|
|
4f3dbf7f59 | ||
|
|
d877215018 | ||
|
|
7512b92a36 | ||
|
|
81a3479fd7 | ||
|
|
edeb62c25d | ||
|
|
45f0b27ed1 | ||
|
|
ffb3f60a22 | ||
|
|
c14b08bd1d | ||
|
|
91560e6e60 | ||
|
|
7df54ad534 | ||
|
|
1e88650bae | ||
|
|
604986e90f | ||
|
|
c77466abb0 | ||
|
|
a9d8cf2ea9 | ||
|
|
22420339a5 | ||
|
|
9076ff8876 | ||
|
|
af20233dfc | ||
|
|
dfd735f2dc | ||
|
|
2a04a4d077 | ||
|
|
67d340ad63 | ||
|
|
2b69cabc2c | ||
|
|
062e35e6b0 | ||
|
|
3088b38d7e | ||
|
|
f5b5570a3b | ||
|
|
80bb19701c | ||
|
|
8376707379 | ||
|
|
483ccb39bf | ||
|
|
41e44d22ea | ||
|
|
766fce82b1 | ||
|
|
938adca47d | ||
|
|
5bb02cbd90 | ||
|
|
66777f3304 | ||
|
|
508896c4f2 |
2
.github/workflows/ci_ubuntu.yaml
vendored
2
.github/workflows/ci_ubuntu.yaml
vendored
@@ -117,6 +117,8 @@ jobs:
|
|||||||
- name: Run CodeQL analysis
|
- name: Run CodeQL analysis
|
||||||
uses: github/codeql-action/analyze@v2
|
uses: github/codeql-action/analyze@v2
|
||||||
if: startsWith(matrix.libt_version, 2) && (matrix.qbt_gui == 'GUI=ON') && startsWith(matrix.qt_version, 6)
|
if: startsWith(matrix.libt_version, 2) && (matrix.qbt_gui == 'GUI=ON') && startsWith(matrix.qt_version, 6)
|
||||||
|
with:
|
||||||
|
category: ${{ github.base_ref || github.ref_name }}
|
||||||
|
|
||||||
- name: Prepare build artifacts
|
- name: Prepare build artifacts
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
9
.github/workflows/ci_windows.yaml
vendored
9
.github/workflows/ci_windows.yaml
vendored
@@ -90,34 +90,35 @@ jobs:
|
|||||||
--recurse-submodules `
|
--recurse-submodules `
|
||||||
https://github.com/arvidn/libtorrent.git
|
https://github.com/arvidn/libtorrent.git
|
||||||
cd libtorrent
|
cd libtorrent
|
||||||
|
$env:CXXFLAGS+=" /guard:cf"
|
||||||
|
$env:LDFLAGS+=" /guard:cf"
|
||||||
cmake `
|
cmake `
|
||||||
-B build `
|
-B build `
|
||||||
-G "Ninja" `
|
-G "Ninja" `
|
||||||
-DCMAKE_BUILD_TYPE=RelWithDebInfo `
|
-DCMAKE_BUILD_TYPE=RelWithDebInfo `
|
||||||
-DCMAKE_CXX_FLAGS=/guard:cf `
|
|
||||||
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON `
|
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON `
|
||||||
-DCMAKE_INSTALL_PREFIX="${{ env.libtorrent_path }}" `
|
-DCMAKE_INSTALL_PREFIX="${{ env.libtorrent_path }}" `
|
||||||
-DCMAKE_TOOLCHAIN_FILE="${{ env.RUNVCPKG_VCPKG_ROOT }}/scripts/buildsystems/vcpkg.cmake" `
|
-DCMAKE_TOOLCHAIN_FILE="${{ env.RUNVCPKG_VCPKG_ROOT }}/scripts/buildsystems/vcpkg.cmake" `
|
||||||
-DBOOST_ROOT="${{ env.boost_path }}" `
|
-DBOOST_ROOT="${{ env.boost_path }}" `
|
||||||
-DBUILD_SHARED_LIBS=OFF `
|
-DBUILD_SHARED_LIBS=OFF `
|
||||||
-Ddeprecated-functions=OFF `
|
-Ddeprecated-functions=OFF `
|
||||||
-Dstatic_runtime=ON `
|
-Dstatic_runtime=OFF `
|
||||||
-DVCPKG_TARGET_TRIPLET=x64-windows-static-release
|
-DVCPKG_TARGET_TRIPLET=x64-windows-static-release
|
||||||
cmake --build build
|
cmake --build build
|
||||||
cmake --install build
|
cmake --install build
|
||||||
|
|
||||||
- name: Build qBittorrent
|
- name: Build qBittorrent
|
||||||
run: |
|
run: |
|
||||||
|
$env:CXXFLAGS+=" /WX"
|
||||||
cmake `
|
cmake `
|
||||||
-B build `
|
-B build `
|
||||||
-G "Ninja" `
|
-G "Ninja" `
|
||||||
-DCMAKE_BUILD_TYPE=RelWithDebInfo `
|
-DCMAKE_BUILD_TYPE=RelWithDebInfo `
|
||||||
-DCMAKE_CXX_FLAGS="/WX" `
|
|
||||||
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON `
|
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON `
|
||||||
-DCMAKE_TOOLCHAIN_FILE="${{ env.RUNVCPKG_VCPKG_ROOT }}/scripts/buildsystems/vcpkg.cmake" `
|
-DCMAKE_TOOLCHAIN_FILE="${{ env.RUNVCPKG_VCPKG_ROOT }}/scripts/buildsystems/vcpkg.cmake" `
|
||||||
-DBOOST_ROOT="${{ env.boost_path }}" `
|
-DBOOST_ROOT="${{ env.boost_path }}" `
|
||||||
-DLibtorrentRasterbar_DIR="${{ env.libtorrent_path }}/lib/cmake/LibtorrentRasterbar" `
|
-DLibtorrentRasterbar_DIR="${{ env.libtorrent_path }}/lib/cmake/LibtorrentRasterbar" `
|
||||||
-DMSVC_RUNTIME_DYNAMIC=OFF `
|
-DMSVC_RUNTIME_DYNAMIC=ON `
|
||||||
-DQT6=ON `
|
-DQT6=ON `
|
||||||
-DTESTING=ON `
|
-DTESTING=ON `
|
||||||
-DVCPKG_TARGET_TRIPLET=x64-windows-static-release `
|
-DVCPKG_TARGET_TRIPLET=x64-windows-static-release `
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
[main]
|
[main]
|
||||||
host = https://www.transifex.com
|
host = https://www.transifex.com
|
||||||
|
|
||||||
[o:sledgehammer999:p:qbittorrent:r:qbittorrent_master]
|
[o:sledgehammer999:p:qbittorrent:r:qbittorrent_v46x]
|
||||||
file_filter = src/lang/qbittorrent_<lang>.ts
|
file_filter = src/lang/qbittorrent_<lang>.ts
|
||||||
source_file = src/lang/qbittorrent_en.ts
|
source_file = src/lang/qbittorrent_en.ts
|
||||||
source_lang = en
|
source_lang = en
|
||||||
@@ -9,7 +9,7 @@ type = QT
|
|||||||
minimum_perc = 23
|
minimum_perc = 23
|
||||||
lang_map = pt: pt_PT, zh: zh_CN
|
lang_map = pt: pt_PT, zh: zh_CN
|
||||||
|
|
||||||
[o:sledgehammer999:p:qbittorrent:r:qbittorrent_webui]
|
[o:sledgehammer999:p:qbittorrent:r:qbittorrent_webui_v46x]
|
||||||
file_filter = src/webui/www/translations/webui_<lang>.ts
|
file_filter = src/webui/www/translations/webui_<lang>.ts
|
||||||
source_file = src/webui/www/translations/webui_en.ts
|
source_file = src/webui/www/translations/webui_en.ts
|
||||||
source_lang = en
|
source_lang = en
|
||||||
|
|||||||
@@ -30,16 +30,21 @@ feature_option(STACKTRACE "Enable stacktrace support" ON)
|
|||||||
feature_option(TESTING "Build internal testing suite" OFF)
|
feature_option(TESTING "Build internal testing suite" OFF)
|
||||||
feature_option(VERBOSE_CONFIGURE "Show information about PACKAGES_FOUND and PACKAGES_NOT_FOUND in the configure output (only useful for debugging the CMake build scripts)" OFF)
|
feature_option(VERBOSE_CONFIGURE "Show information about PACKAGES_FOUND and PACKAGES_NOT_FOUND in the configure output (only useful for debugging the CMake build scripts)" OFF)
|
||||||
|
|
||||||
if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
if (CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
|
||||||
feature_option_dependent(DBUS
|
feature_option_dependent(DBUS
|
||||||
"Enable support for notifications and power-management features via D-Bus on Linux"
|
"Enable support for notifications and power-management features via D-Bus"
|
||||||
ON "GUI" OFF
|
ON "GUI" OFF
|
||||||
)
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||||||
feature_option_dependent(SYSTEMD
|
feature_option_dependent(SYSTEMD
|
||||||
"Install systemd service file. Target directory is overridable with `SYSTEMD_SERVICES_INSTALL_DIR` variable"
|
"Install systemd service file. Target directory is overridable with `SYSTEMD_SERVICES_INSTALL_DIR` variable"
|
||||||
OFF "NOT GUI" OFF
|
OFF "NOT GUI" OFF
|
||||||
)
|
)
|
||||||
elseif (MSVC)
|
endif()
|
||||||
|
|
||||||
|
if (MSVC)
|
||||||
feature_option(MSVC_RUNTIME_DYNAMIC "Use MSVC dynamic runtime library (-MD) instead of static (-MT)" ON)
|
feature_option(MSVC_RUNTIME_DYNAMIC "Use MSVC dynamic runtime library (-MD) instead of static (-MT)" ON)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|||||||
82
Changelog
82
Changelog
@@ -1,3 +1,85 @@
|
|||||||
|
Mon Nov 20th 2023 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.6.1
|
||||||
|
- FEATURE: Add option to enable previous Add new torrent dialog behavior (glassez)
|
||||||
|
- BUGFIX: Prevent crash due to race condition when adding magnet link (glassez)
|
||||||
|
- BUGFIX: Fix Enter key behavior when add new torrent (glassez)
|
||||||
|
- BUGFIX: Add missing main window icon (iomezk)
|
||||||
|
- BUGFIX: Update size of selected files when selection is changed (glassez)
|
||||||
|
- BUGFIX: Correctly handle changing save path of torrent w/o metadata (glassez)
|
||||||
|
- BUGFIX: Use appropriate icon for "moving" torrents in transfer list (xavier2k6)
|
||||||
|
- WEBUI: Drop WebUI default credentials (glassez)
|
||||||
|
- WEBUI: Add I2P settings to WebUI (thalieht)
|
||||||
|
- WEBUI: Fix duplicate scrollbar on Transfer List (AgentConDier)
|
||||||
|
- WEBUI: Fix .torrent file upload on iPadOS (Vitaly Cheptsov)
|
||||||
|
- WEBUI: Fix incorrect subcategory sorting (Bartu Özen)
|
||||||
|
- WEBUI: Correctly set save path in RSS rules (glassez)
|
||||||
|
- WEBUI: Allow to request torrents count via WebAPI (glassez)
|
||||||
|
- WEBUI: Improve performance of getting torrent numbers via WebAPI (Chocobo1)
|
||||||
|
- WEBUI: Improve free disk space checking for WebAPI (glassez)
|
||||||
|
- WINDOWS: NSIS: Fixed typo in the installer's hungarian translation (MartinKing01)
|
||||||
|
- LINUX: Fix invisible tray icon with Qt5 in Linux (thalieht)
|
||||||
|
- MACOS: Remove "Physical memory (RAM) usage limit" option (Chocobo1)
|
||||||
|
|
||||||
|
Sun Oct 22nd 2023 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.6.0
|
||||||
|
- FEATURE: Add (experimental) I2P support (glassez)
|
||||||
|
- FEATURE: Provide UI editor for the default theme (glassez)
|
||||||
|
- FEATURE: Various UI theming improvements (glassez)
|
||||||
|
- FEATURE: Implement torrent tags editing dialog (glassez)
|
||||||
|
- FEATURE: Revamp "Watched folder options" and "Automated RSS downloader" dialog (glassez)
|
||||||
|
- FEATURE: Allow to use another icons in dark mode (glassez)
|
||||||
|
- FEATURE: Allow to add new torrents to queue top (glassez)
|
||||||
|
- FEATURE: Allow to filter torrent list by save path (Tom)
|
||||||
|
- FEATURE: Expose 'socket send/receive buffer size' options (Chocobo1)
|
||||||
|
- FEATURE: Expose 'max torrent file size' setting (Chocobo1)
|
||||||
|
- FEATURE: Expose 'bdecode limits' settings (Chocobo1)
|
||||||
|
- FEATURE: Add options to adjust behavior of merging trackers to existing torrent (glassez)
|
||||||
|
- FEATURE: Add option to stop seeding when torrent has been inactive (Christopher)
|
||||||
|
- FEATURE: Allow to use proxy per subsystem (glassez)
|
||||||
|
- FEATURE: Expand the scope of "Proxy hostname lookup" option (glassez)
|
||||||
|
- FEATURE: Add shortcut for "Ban peer permanently" function (Luka Čelebić)
|
||||||
|
- FEATURE: Add option to auto hide zero status filters (glassez)
|
||||||
|
- FEATURE: Allow to disable confirmation of Pause/Resume All (glassez)
|
||||||
|
- FEATURE: Add alternative shortcut CTRL+E for CTRL+F (Luka Čelebić)
|
||||||
|
- FEATURE: Show filtered port numbers in logs (Hanabishi)
|
||||||
|
- FEATURE: Add button to copy library versions to clipboard (Chocobo1)
|
||||||
|
- BUGFIX: Ensure ongoing storage moving job will be completed when shutting down (Chocobo1)
|
||||||
|
- BUGFIX: Refactored many areas to call non UI blocking code (glassez)
|
||||||
|
- BUGFIX: Various improvements to the SQLite backend (glassez)
|
||||||
|
- BUGFIX: Improve startup window state handling (glassez)
|
||||||
|
- BUGFIX: Use tray icon from system theme only if option is set (glassez)
|
||||||
|
- BUGFIX: Inhibit system sleep while torrents are moving (Sentox6)
|
||||||
|
- BUGFIX: Use hostname instead of domain name in tracker filter list (tearfur)
|
||||||
|
- BUGFIX: Visually validate input path in torrent creator dialog (Chocobo1)
|
||||||
|
- BUGFIX: Disable symlink resolving in Torrent creator (Ignat Loskutov)
|
||||||
|
- BUGFIX: Change default value for `file pool size` and `stop tracker timeout` settings (stalkerok)
|
||||||
|
- BUGFIX: Log when duplicate torrents are being added (glassez)
|
||||||
|
- BUGFIX: Inhibit suspend instead of screen idle (axet)
|
||||||
|
- BUGFIX: Ensure file name is valid when exporting torrents (glassez)
|
||||||
|
- BUGFIX: Open "Save path" if torrent has no metadata (Xu Chao)
|
||||||
|
- BUGFIX: Prevent torrent starting unexpectedly edge case with magnet (Xu Chao)
|
||||||
|
- BUGFIX: Better ergonomics of the "Add new torrent" dialog (Xu Chao, glassez)
|
||||||
|
- WEBUI: Add log viewer (brvphoenix)
|
||||||
|
- WEBUI: WebAPI: Allow to specify session cookie name (glassez)
|
||||||
|
- WEBUI: Improve sync API performance (glassez)
|
||||||
|
- WEBUI: Add filelog settings (brvphoenix)
|
||||||
|
- WEBUI: Add multi-file renaming (loligans)
|
||||||
|
- WEBUI: Add "Add to top of queue" option (thalieht)
|
||||||
|
- WEBUI: Implement subcategories (Bartu Özen)
|
||||||
|
- WEBUI: Set "SameSite=None" if CSRF Protection is disabled (七海千秋)
|
||||||
|
- WEBUI: Show only hosts in tracker filter list (ttys3)
|
||||||
|
- WEBUI: Set Connection status and Speed limits tooltips (Raymond Ha)
|
||||||
|
- WEBUI: set Cross Origin Opener Policy to `same-origin` (Chocobo1)
|
||||||
|
- WEBUI: Fix response for HTTP HEAD method (Chocobo1)
|
||||||
|
- WEBUI: Preserve the network interfaces when connection is down (Fabricio Silva)
|
||||||
|
- WEBUI: Add "Add Tags" field for RSS rules (Matic Babnik)
|
||||||
|
- WEBUI: Fix missing error icon (Trim21)
|
||||||
|
- RSS: Add "Rename rule" button to RSS Downloader (BallsOfSpaghetti)
|
||||||
|
- RSS: Allow to edit RSS feed URL (glassez)
|
||||||
|
- RSS: Allow to assign priority to RSS download rule (glassez)
|
||||||
|
- SEARCH: Use python isolate mode (Chocobo1)
|
||||||
|
- SEARCH: Bump python version minimum requirement to 3.7.0 (Chocobo1)
|
||||||
|
- OTHER: Enable DBUS cmake option on FreeBSD (yuri@FreeBSD)
|
||||||
|
- OTHER: Numerous code improvements and refactorings (glassez, Chocobo1)
|
||||||
|
|
||||||
Unreleased - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.5.0
|
Unreleased - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.5.0
|
||||||
- FEATURE: Add `Auto resize columns` functionality (Chocobo1)
|
- FEATURE: Add `Auto resize columns` functionality (Chocobo1)
|
||||||
- FEATURE: Allow to use Category paths in `Manual` mode (glassez)
|
- FEATURE: Allow to use Category paths in `Manual` mode (glassez)
|
||||||
|
|||||||
20
configure
vendored
20
configure
vendored
@@ -1,6 +1,6 @@
|
|||||||
#! /bin/sh
|
#! /bin/sh
|
||||||
# Guess values for system-dependent variables and create Makefiles.
|
# Guess values for system-dependent variables and create Makefiles.
|
||||||
# Generated by GNU Autoconf 2.71 for qbittorrent v4.6.0beta2.
|
# Generated by GNU Autoconf 2.71 for qbittorrent v4.6.1.
|
||||||
#
|
#
|
||||||
# Report bugs to <bugs.qbittorrent.org>.
|
# Report bugs to <bugs.qbittorrent.org>.
|
||||||
#
|
#
|
||||||
@@ -611,8 +611,8 @@ MAKEFLAGS=
|
|||||||
# Identity of this package.
|
# Identity of this package.
|
||||||
PACKAGE_NAME='qbittorrent'
|
PACKAGE_NAME='qbittorrent'
|
||||||
PACKAGE_TARNAME='qbittorrent'
|
PACKAGE_TARNAME='qbittorrent'
|
||||||
PACKAGE_VERSION='v4.6.0beta2'
|
PACKAGE_VERSION='v4.6.1'
|
||||||
PACKAGE_STRING='qbittorrent v4.6.0beta2'
|
PACKAGE_STRING='qbittorrent v4.6.1'
|
||||||
PACKAGE_BUGREPORT='bugs.qbittorrent.org'
|
PACKAGE_BUGREPORT='bugs.qbittorrent.org'
|
||||||
PACKAGE_URL='https://www.qbittorrent.org/'
|
PACKAGE_URL='https://www.qbittorrent.org/'
|
||||||
|
|
||||||
@@ -1329,7 +1329,7 @@ if test "$ac_init_help" = "long"; then
|
|||||||
# Omit some internal or obsolete options to make the list less imposing.
|
# Omit some internal or obsolete options to make the list less imposing.
|
||||||
# This message is too long to be a string in the A/UX 3.1 sh.
|
# This message is too long to be a string in the A/UX 3.1 sh.
|
||||||
cat <<_ACEOF
|
cat <<_ACEOF
|
||||||
\`configure' configures qbittorrent v4.6.0beta2 to adapt to many kinds of systems.
|
\`configure' configures qbittorrent v4.6.1 to adapt to many kinds of systems.
|
||||||
|
|
||||||
Usage: $0 [OPTION]... [VAR=VALUE]...
|
Usage: $0 [OPTION]... [VAR=VALUE]...
|
||||||
|
|
||||||
@@ -1400,7 +1400,7 @@ fi
|
|||||||
|
|
||||||
if test -n "$ac_init_help"; then
|
if test -n "$ac_init_help"; then
|
||||||
case $ac_init_help in
|
case $ac_init_help in
|
||||||
short | recursive ) echo "Configuration of qbittorrent v4.6.0beta2:";;
|
short | recursive ) echo "Configuration of qbittorrent v4.6.1:";;
|
||||||
esac
|
esac
|
||||||
cat <<\_ACEOF
|
cat <<\_ACEOF
|
||||||
|
|
||||||
@@ -1533,7 +1533,7 @@ fi
|
|||||||
test -n "$ac_init_help" && exit $ac_status
|
test -n "$ac_init_help" && exit $ac_status
|
||||||
if $ac_init_version; then
|
if $ac_init_version; then
|
||||||
cat <<\_ACEOF
|
cat <<\_ACEOF
|
||||||
qbittorrent configure v4.6.0beta2
|
qbittorrent configure v4.6.1
|
||||||
generated by GNU Autoconf 2.71
|
generated by GNU Autoconf 2.71
|
||||||
|
|
||||||
Copyright (C) 2021 Free Software Foundation, Inc.
|
Copyright (C) 2021 Free Software Foundation, Inc.
|
||||||
@@ -1648,7 +1648,7 @@ cat >config.log <<_ACEOF
|
|||||||
This file contains any messages produced by compilers while
|
This file contains any messages produced by compilers while
|
||||||
running configure, to aid debugging if configure makes a mistake.
|
running configure, to aid debugging if configure makes a mistake.
|
||||||
|
|
||||||
It was created by qbittorrent $as_me v4.6.0beta2, which was
|
It was created by qbittorrent $as_me v4.6.1, which was
|
||||||
generated by GNU Autoconf 2.71. Invocation command line was
|
generated by GNU Autoconf 2.71. Invocation command line was
|
||||||
|
|
||||||
$ $0$ac_configure_args_raw
|
$ $0$ac_configure_args_raw
|
||||||
@@ -4779,7 +4779,7 @@ fi
|
|||||||
|
|
||||||
# Define the identity of the package.
|
# Define the identity of the package.
|
||||||
PACKAGE='qbittorrent'
|
PACKAGE='qbittorrent'
|
||||||
VERSION='v4.6.0beta2'
|
VERSION='v4.6.1'
|
||||||
|
|
||||||
|
|
||||||
printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h
|
printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h
|
||||||
@@ -7237,7 +7237,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
|
|||||||
# report actual input values of CONFIG_FILES etc. instead of their
|
# report actual input values of CONFIG_FILES etc. instead of their
|
||||||
# values after options handling.
|
# values after options handling.
|
||||||
ac_log="
|
ac_log="
|
||||||
This file was extended by qbittorrent $as_me v4.6.0beta2, which was
|
This file was extended by qbittorrent $as_me v4.6.1, which was
|
||||||
generated by GNU Autoconf 2.71. Invocation command line was
|
generated by GNU Autoconf 2.71. Invocation command line was
|
||||||
|
|
||||||
CONFIG_FILES = $CONFIG_FILES
|
CONFIG_FILES = $CONFIG_FILES
|
||||||
@@ -7297,7 +7297,7 @@ ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\
|
|||||||
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
||||||
ac_cs_config='$ac_cs_config_escaped'
|
ac_cs_config='$ac_cs_config_escaped'
|
||||||
ac_cs_version="\\
|
ac_cs_version="\\
|
||||||
qbittorrent config.status v4.6.0beta2
|
qbittorrent config.status v4.6.1
|
||||||
configured by $0, generated by GNU Autoconf 2.71,
|
configured by $0, generated by GNU Autoconf 2.71,
|
||||||
with options \\"\$ac_cs_config\\"
|
with options \\"\$ac_cs_config\\"
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
AC_INIT([qbittorrent], [v4.6.0beta2], [bugs.qbittorrent.org], [], [https://www.qbittorrent.org/])
|
AC_INIT([qbittorrent], [v4.6.1], [bugs.qbittorrent.org], [], [https://www.qbittorrent.org/])
|
||||||
AC_CONFIG_AUX_DIR([build-aux])
|
AC_CONFIG_AUX_DIR([build-aux])
|
||||||
AC_CONFIG_MACRO_DIR([m4])
|
AC_CONFIG_MACRO_DIR([m4])
|
||||||
: ${CFLAGS=""}
|
: ${CFLAGS=""}
|
||||||
|
|||||||
4
dist/mac/Info.plist
vendored
4
dist/mac/Info.plist
vendored
@@ -55,7 +55,7 @@
|
|||||||
<key>CFBundlePackageType</key>
|
<key>CFBundlePackageType</key>
|
||||||
<string>APPL</string>
|
<string>APPL</string>
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>4.5.0</string>
|
<string>4.6.1</string>
|
||||||
<key>CFBundleExecutable</key>
|
<key>CFBundleExecutable</key>
|
||||||
<string>${EXECUTABLE_NAME}</string>
|
<string>${EXECUTABLE_NAME}</string>
|
||||||
<key>CFBundleIdentifier</key>
|
<key>CFBundleIdentifier</key>
|
||||||
@@ -67,7 +67,7 @@
|
|||||||
<key>NSAppleScriptEnabled</key>
|
<key>NSAppleScriptEnabled</key>
|
||||||
<string>YES</string>
|
<string>YES</string>
|
||||||
<key>NSHumanReadableCopyright</key>
|
<key>NSHumanReadableCopyright</key>
|
||||||
<string>Copyright © 2006-2022 The qBittorrent project</string>
|
<string>Copyright © 2006-2023 The qBittorrent project</string>
|
||||||
<key>UTExportedTypeDeclarations</key>
|
<key>UTExportedTypeDeclarations</key>
|
||||||
<array>
|
<array>
|
||||||
<dict>
|
<dict>
|
||||||
|
|||||||
@@ -74,6 +74,6 @@
|
|||||||
<url type="translate">https://github.com/qbittorrent/qBittorrent/wiki/How-to-translate-qBittorrent</url>
|
<url type="translate">https://github.com/qbittorrent/qBittorrent/wiki/How-to-translate-qBittorrent</url>
|
||||||
<content_rating type="oars-1.1"/>
|
<content_rating type="oars-1.1"/>
|
||||||
<releases>
|
<releases>
|
||||||
<release version="4.5.0" date="2022-01-06"/>
|
<release version="4.6.1" date="2023-11-20"/>
|
||||||
</releases>
|
</releases>
|
||||||
</component>
|
</component>
|
||||||
|
|||||||
138
dist/unix/org.qbittorrent.qBittorrent.desktop
vendored
138
dist/unix/org.qbittorrent.qBittorrent.desktop
vendored
File diff suppressed because it is too large
Load Diff
4
dist/windows/config.nsi
vendored
4
dist/windows/config.nsi
vendored
@@ -25,7 +25,7 @@
|
|||||||
; 4.5.1.3 -> good
|
; 4.5.1.3 -> good
|
||||||
; 4.5.1.3.2 -> bad
|
; 4.5.1.3.2 -> bad
|
||||||
; 4.5.0beta -> bad
|
; 4.5.0beta -> bad
|
||||||
!define /ifndef QBT_VERSION "4.5.0"
|
!define /ifndef QBT_VERSION "4.6.1"
|
||||||
|
|
||||||
; Option that controls the installer's window name
|
; Option that controls the installer's window name
|
||||||
; If set, its value will be used like this:
|
; If set, its value will be used like this:
|
||||||
@@ -112,7 +112,7 @@ OutFile "qbittorrent_${QBT_INSTALLER_FILENAME}_setup.exe"
|
|||||||
;Installer Version Information
|
;Installer Version Information
|
||||||
VIAddVersionKey "ProductName" "qBittorrent"
|
VIAddVersionKey "ProductName" "qBittorrent"
|
||||||
VIAddVersionKey "CompanyName" "The qBittorrent project"
|
VIAddVersionKey "CompanyName" "The qBittorrent project"
|
||||||
VIAddVersionKey "LegalCopyright" "Copyright ©2006-2022 The qBittorrent project"
|
VIAddVersionKey "LegalCopyright" "Copyright ©2006-2023 The qBittorrent project"
|
||||||
VIAddVersionKey "FileDescription" "qBittorrent - A Bittorrent Client"
|
VIAddVersionKey "FileDescription" "qBittorrent - A Bittorrent Client"
|
||||||
VIAddVersionKey "FileVersion" "${QBT_VERSION}"
|
VIAddVersionKey "FileVersion" "${QBT_VERSION}"
|
||||||
|
|
||||||
|
|||||||
10
dist/windows/installer-translations/french.nsi
vendored
10
dist/windows/installer-translations/french.nsi
vendored
@@ -7,7 +7,7 @@ LangString inst_desktop ${LANG_FRENCH} "Créer un Raccourci sur le Bureau"
|
|||||||
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
|
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
|
||||||
LangString inst_startmenu ${LANG_FRENCH} "Créer un Raccourci dans le Menu Démarrer"
|
LangString inst_startmenu ${LANG_FRENCH} "Créer un Raccourci dans le Menu Démarrer"
|
||||||
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"
|
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"
|
||||||
LangString inst_startup ${LANG_FRENCH} "Démarrez qBittorrent au démarrage de Windows"
|
LangString inst_startup ${LANG_FRENCH} "Démarrer qBittorrent au démarrage de Windows"
|
||||||
;LangString inst_torrent ${LANG_ENGLISH} "Open .torrent files with qBittorrent"
|
;LangString inst_torrent ${LANG_ENGLISH} "Open .torrent files with qBittorrent"
|
||||||
LangString inst_torrent ${LANG_FRENCH} "Ouvrir les fichiers .torrent avec qBittorrent"
|
LangString inst_torrent ${LANG_FRENCH} "Ouvrir les fichiers .torrent avec qBittorrent"
|
||||||
;LangString inst_magnet ${LANG_ENGLISH} "Open magnet links with qBittorrent"
|
;LangString inst_magnet ${LANG_ENGLISH} "Open magnet links with qBittorrent"
|
||||||
@@ -15,7 +15,7 @@ LangString inst_magnet ${LANG_FRENCH} "Ouvrir les liens magnet avec qBittorrent"
|
|||||||
;LangString inst_firewall ${LANG_ENGLISH} "Add Windows Firewall rule"
|
;LangString inst_firewall ${LANG_ENGLISH} "Add Windows Firewall rule"
|
||||||
LangString inst_firewall ${LANG_FRENCH} "Ajouter une règle au Pare-Feu de Windows"
|
LangString inst_firewall ${LANG_FRENCH} "Ajouter une règle au Pare-Feu de Windows"
|
||||||
;LangString inst_pathlimit ${LANG_ENGLISH} "Disable Windows path length limit (260 character MAX_PATH limitation, requires Windows 10 1607 or later)"
|
;LangString inst_pathlimit ${LANG_ENGLISH} "Disable Windows path length limit (260 character MAX_PATH limitation, requires Windows 10 1607 or later)"
|
||||||
LangString inst_pathlimit ${LANG_FRENCH} "Désactiver la limite de taille du chemin de Windows (limitation de MAX_PATH 260 caractères, nécessite Windows 10 1607 ou plus)"
|
LangString inst_pathlimit ${LANG_FRENCH} "Désactiver la limite de taille des chemins de Windows (limite MAX_PATH de 260 caractères, nécessite Windows 10 1607 ou plus)"
|
||||||
;LangString inst_firewallinfo ${LANG_ENGLISH} "Adding Windows Firewall rule"
|
;LangString inst_firewallinfo ${LANG_ENGLISH} "Adding Windows Firewall rule"
|
||||||
LangString inst_firewallinfo ${LANG_FRENCH} "Ajout d'une règle au Pare-Feu de Windows"
|
LangString inst_firewallinfo ${LANG_FRENCH} "Ajout d'une règle au Pare-Feu de Windows"
|
||||||
;LangString inst_warning ${LANG_ENGLISH} "qBittorrent is running. Please close the application before installing."
|
;LangString inst_warning ${LANG_ENGLISH} "qBittorrent is running. Please close the application before installing."
|
||||||
@@ -31,7 +31,7 @@ LangString inst_requires_64bit ${LANG_FRENCH} "Cet installateur ne fonctionne qu
|
|||||||
;LangString inst_requires_win7 ${LANG_ENGLISH} "This qBittorrent version requires at least Windows 7."
|
;LangString inst_requires_win7 ${LANG_ENGLISH} "This qBittorrent version requires at least Windows 7."
|
||||||
LangString inst_requires_win7 ${LANG_FRENCH} "Cette version de qBittorrent nécessite au moins Windows 7."
|
LangString inst_requires_win7 ${LANG_FRENCH} "Cette version de qBittorrent nécessite au moins Windows 7."
|
||||||
;LangString inst_requires_win10 ${LANG_ENGLISH} "This installer requires at least Windows 10 1809."
|
;LangString inst_requires_win10 ${LANG_ENGLISH} "This installer requires at least Windows 10 1809."
|
||||||
LangString inst_requires_win10 ${LANG_FRENCH} "This installer requires at least Windows 10 1809."
|
LangString inst_requires_win10 ${LANG_FRENCH} "Cet installateur nécessite au moins Windows 10 1809."
|
||||||
;LangString inst_uninstall_link_description ${LANG_ENGLISH} "Uninstall qBittorrent"
|
;LangString inst_uninstall_link_description ${LANG_ENGLISH} "Uninstall qBittorrent"
|
||||||
LangString inst_uninstall_link_description ${LANG_FRENCH} "Désinstaller qBittorrent"
|
LangString inst_uninstall_link_description ${LANG_FRENCH} "Désinstaller qBittorrent"
|
||||||
|
|
||||||
@@ -53,9 +53,9 @@ LangString remove_firewall ${LANG_FRENCH} "Supprimer la règle du Pare-Feu de Wi
|
|||||||
;LangString remove_firewallinfo ${LANG_ENGLISH} "Removing Windows Firewall rule"
|
;LangString remove_firewallinfo ${LANG_ENGLISH} "Removing Windows Firewall rule"
|
||||||
LangString remove_firewallinfo ${LANG_FRENCH} "Suppression de la règle du Pare-Feu de Windows"
|
LangString remove_firewallinfo ${LANG_FRENCH} "Suppression de la règle du Pare-Feu de Windows"
|
||||||
;LangString remove_cache ${LANG_ENGLISH} "Remove torrents and cached data"
|
;LangString remove_cache ${LANG_ENGLISH} "Remove torrents and cached data"
|
||||||
LangString remove_cache ${LANG_FRENCH} "Supprimer les torrents et données cachées"
|
LangString remove_cache ${LANG_FRENCH} "Supprimer les torrents et données en cache"
|
||||||
;LangString uninst_warning ${LANG_ENGLISH} "qBittorrent is running. Please close the application before uninstalling."
|
;LangString uninst_warning ${LANG_ENGLISH} "qBittorrent is running. Please close the application before uninstalling."
|
||||||
LangString uninst_warning ${LANG_FRENCH} "qBittorrent est en cours d'exécution. Veuillez fermer l'application avant la désinstallation."
|
LangString uninst_warning ${LANG_FRENCH} "qBittorrent est en cours d'exécution. Fermez l'application avant de la désinstaller."
|
||||||
;LangString uninst_tor_warn ${LANG_ENGLISH} "Not removing .torrent association. It is associated with:"
|
;LangString uninst_tor_warn ${LANG_ENGLISH} "Not removing .torrent association. It is associated with:"
|
||||||
LangString uninst_tor_warn ${LANG_FRENCH} "Ne peut pas supprimer l'association du .torrent. Elle est associée avec :"
|
LangString uninst_tor_warn ${LANG_FRENCH} "Ne peut pas supprimer l'association du .torrent. Elle est associée avec :"
|
||||||
;LangString uninst_mag_warn ${LANG_ENGLISH} "Not removing magnet association. It is associated with:"
|
;LangString uninst_mag_warn ${LANG_ENGLISH} "Not removing magnet association. It is associated with:"
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ LangString inst_pathlimit ${LANG_HUNGARIAN} "A Windows elérési útvonalak hoss
|
|||||||
;LangString inst_firewallinfo ${LANG_ENGLISH} "Adding Windows Firewall rule"
|
;LangString inst_firewallinfo ${LANG_ENGLISH} "Adding Windows Firewall rule"
|
||||||
LangString inst_firewallinfo ${LANG_HUNGARIAN} "Windows Tűzfal szabály hozzáadása folyamatban"
|
LangString inst_firewallinfo ${LANG_HUNGARIAN} "Windows Tűzfal szabály hozzáadása folyamatban"
|
||||||
;LangString inst_warning ${LANG_ENGLISH} "qBittorrent is running. Please close the application before installing."
|
;LangString inst_warning ${LANG_ENGLISH} "qBittorrent is running. Please close the application before installing."
|
||||||
LangString inst_warning ${LANG_HUNGARIAN} "A qBittorrent fut. Kérem zárjba be az alkalmazást a telepítés előtt."
|
LangString inst_warning ${LANG_HUNGARIAN} "A qBittorrent fut. Kérem zárja be az alkalmazást a telepítés előtt."
|
||||||
;LangString inst_uninstall_question ${LANG_ENGLISH} "Current version will be uninstalled. User settings and torrents will remain intact."
|
;LangString inst_uninstall_question ${LANG_ENGLISH} "Current version will be uninstalled. User settings and torrents will remain intact."
|
||||||
LangString inst_uninstall_question ${LANG_HUNGARIAN} "A jelenlegi verzió el lesz távolítva. A felhasználói beállítások és a torrentek megmaradnak."
|
LangString inst_uninstall_question ${LANG_HUNGARIAN} "A jelenlegi verzió el lesz távolítva. A felhasználói beállítások és a torrentek megmaradnak."
|
||||||
;LangString inst_unist ${LANG_ENGLISH} "Uninstalling previous version."
|
;LangString inst_unist ${LANG_ENGLISH} "Uninstalling previous version."
|
||||||
|
|||||||
56
dist/windows/installer-translations/romanian.nsi
vendored
56
dist/windows/installer-translations/romanian.nsi
vendored
@@ -1,62 +1,62 @@
|
|||||||
;Installer strings
|
;Installer strings
|
||||||
|
|
||||||
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
|
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
|
||||||
LangString inst_qbt_req ${LANG_ROMANIAN} "qBittorrent (required)"
|
LangString inst_qbt_req ${LANG_ROMANIAN} "qBittorrent (obligatoriu)"
|
||||||
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut"
|
;LangString inst_desktop ${LANG_ENGLISH} "Create Desktop Shortcut"
|
||||||
LangString inst_desktop ${LANG_ROMANIAN} "Create Desktop Shortcut"
|
LangString inst_desktop ${LANG_ROMANIAN} "Creați o comandă rapidă pe Desktop"
|
||||||
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
|
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
|
||||||
LangString inst_startmenu ${LANG_ROMANIAN} "Create Start Menu Shortcut"
|
LangString inst_startmenu ${LANG_ROMANIAN} "Creați o comandă rapidă în meniul Start"
|
||||||
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"
|
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"
|
||||||
LangString inst_startup ${LANG_ROMANIAN} "Start qBittorrent on Windows start up"
|
LangString inst_startup ${LANG_ROMANIAN} "Porniți qBittorrent la pornirea Windows"
|
||||||
;LangString inst_torrent ${LANG_ENGLISH} "Open .torrent files with qBittorrent"
|
;LangString inst_torrent ${LANG_ENGLISH} "Open .torrent files with qBittorrent"
|
||||||
LangString inst_torrent ${LANG_ROMANIAN} "Open .torrent files with qBittorrent"
|
LangString inst_torrent ${LANG_ROMANIAN} "Deschideți fișierele .torrent cu qBittorrent"
|
||||||
;LangString inst_magnet ${LANG_ENGLISH} "Open magnet links with qBittorrent"
|
;LangString inst_magnet ${LANG_ENGLISH} "Open magnet links with qBittorrent"
|
||||||
LangString inst_magnet ${LANG_ROMANIAN} "Open magnet links with qBittorrent"
|
LangString inst_magnet ${LANG_ROMANIAN} "Deschideți linkurile magnet cu qBittorrent"
|
||||||
;LangString inst_firewall ${LANG_ENGLISH} "Add Windows Firewall rule"
|
;LangString inst_firewall ${LANG_ENGLISH} "Add Windows Firewall rule"
|
||||||
LangString inst_firewall ${LANG_ROMANIAN} "Add Windows Firewall rule"
|
LangString inst_firewall ${LANG_ROMANIAN} "Adăugați regula Windows Firewall"
|
||||||
;LangString inst_pathlimit ${LANG_ENGLISH} "Disable Windows path length limit (260 character MAX_PATH limitation, requires Windows 10 1607 or later)"
|
;LangString inst_pathlimit ${LANG_ENGLISH} "Disable Windows path length limit (260 character MAX_PATH limitation, requires Windows 10 1607 or later)"
|
||||||
LangString inst_pathlimit ${LANG_ROMANIAN} "Disable Windows path length limit (260 character MAX_PATH limitation, requires Windows 10 1607 or later)"
|
LangString inst_pathlimit ${LANG_ROMANIAN} "Dezactivați limita de lungime a căii Windows (260 de caractere limită MAX_PATH, necesită Windows 10 1607 sau o versiune ulterioară)"
|
||||||
;LangString inst_firewallinfo ${LANG_ENGLISH} "Adding Windows Firewall rule"
|
;LangString inst_firewallinfo ${LANG_ENGLISH} "Adding Windows Firewall rule"
|
||||||
LangString inst_firewallinfo ${LANG_ROMANIAN} "Adding Windows Firewall rule"
|
LangString inst_firewallinfo ${LANG_ROMANIAN} "Adăugarea regulii Windows Firewall"
|
||||||
;LangString inst_warning ${LANG_ENGLISH} "qBittorrent is running. Please close the application before installing."
|
;LangString inst_warning ${LANG_ENGLISH} "qBittorrent is running. Please close the application before installing."
|
||||||
LangString inst_warning ${LANG_ROMANIAN} "qBittorrent is running. Please close the application before installing."
|
LangString inst_warning ${LANG_ROMANIAN} "qBittorrent rulează. Vă rugăm să închideți aplicația înainte de instalare."
|
||||||
;LangString inst_uninstall_question ${LANG_ENGLISH} "Current version will be uninstalled. User settings and torrents will remain intact."
|
;LangString inst_uninstall_question ${LANG_ENGLISH} "Current version will be uninstalled. User settings and torrents will remain intact."
|
||||||
LangString inst_uninstall_question ${LANG_ROMANIAN} "Current version will be uninstalled. User settings and torrents will remain intact."
|
LangString inst_uninstall_question ${LANG_ROMANIAN} "Versiunea actuală va fi dezinstalată. Setările utilizatorului și torrentele vor rămâne intacte."
|
||||||
;LangString inst_unist ${LANG_ENGLISH} "Uninstalling previous version."
|
;LangString inst_unist ${LANG_ENGLISH} "Uninstalling previous version."
|
||||||
LangString inst_unist ${LANG_ROMANIAN} "Uninstalling previous version."
|
LangString inst_unist ${LANG_ROMANIAN} "Se dezinstalează versiunea anterioară."
|
||||||
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
|
||||||
LangString launch_qbt ${LANG_ROMANIAN} "Launch qBittorrent."
|
LangString launch_qbt ${LANG_ROMANIAN} "Lansați 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."
|
||||||
LangString inst_requires_64bit ${LANG_ROMANIAN} "This installer works only in 64-bit Windows versions."
|
LangString inst_requires_64bit ${LANG_ROMANIAN} "Acest program de instalare funcționează doar pe versiunile Windows pe 64 de biți."
|
||||||
;LangString inst_requires_win7 ${LANG_ENGLISH} "This qBittorrent version requires at least Windows 7."
|
;LangString inst_requires_win7 ${LANG_ENGLISH} "This qBittorrent version requires at least Windows 7."
|
||||||
LangString inst_requires_win7 ${LANG_ROMANIAN} "This qBittorrent version requires at least Windows 7."
|
LangString inst_requires_win7 ${LANG_ROMANIAN} "Această versiune de qBittorrent necesită cel puțin Windows 7."
|
||||||
;LangString inst_requires_win10 ${LANG_ENGLISH} "This installer requires at least Windows 10 1809."
|
;LangString inst_requires_win10 ${LANG_ENGLISH} "This installer requires at least Windows 10 1809."
|
||||||
LangString inst_requires_win10 ${LANG_ROMANIAN} "This installer requires at least Windows 10 1809."
|
LangString inst_requires_win10 ${LANG_ROMANIAN} "Acest program de instalare necesită cel puțin Windows 10 1809."
|
||||||
;LangString inst_uninstall_link_description ${LANG_ENGLISH} "Uninstall qBittorrent"
|
;LangString inst_uninstall_link_description ${LANG_ENGLISH} "Uninstall qBittorrent"
|
||||||
LangString inst_uninstall_link_description ${LANG_ROMANIAN} "Uninstall qBittorrent"
|
LangString inst_uninstall_link_description ${LANG_ROMANIAN} "Dezinstalați qBittorrent"
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
;Uninstaller strings
|
;Uninstaller strings
|
||||||
|
|
||||||
;LangString remove_files ${LANG_ENGLISH} "Remove files"
|
;LangString remove_files ${LANG_ENGLISH} "Remove files"
|
||||||
LangString remove_files ${LANG_ROMANIAN} "Remove files"
|
LangString remove_files ${LANG_ROMANIAN} "Eliminați fișierele"
|
||||||
;LangString remove_shortcuts ${LANG_ENGLISH} "Remove shortcuts"
|
;LangString remove_shortcuts ${LANG_ENGLISH} "Remove shortcuts"
|
||||||
LangString remove_shortcuts ${LANG_ROMANIAN} "Remove shortcuts"
|
LangString remove_shortcuts ${LANG_ROMANIAN} "Eliminați comenzile rapide"
|
||||||
;LangString remove_associations ${LANG_ENGLISH} "Remove file associations"
|
;LangString remove_associations ${LANG_ENGLISH} "Remove file associations"
|
||||||
LangString remove_associations ${LANG_ROMANIAN} "Remove file associations"
|
LangString remove_associations ${LANG_ROMANIAN} "Eliminați asocierile de fișiere"
|
||||||
;LangString remove_registry ${LANG_ENGLISH} "Remove registry keys"
|
;LangString remove_registry ${LANG_ENGLISH} "Remove registry keys"
|
||||||
LangString remove_registry ${LANG_ROMANIAN} "Remove registry keys"
|
LangString remove_registry ${LANG_ROMANIAN} "Eliminați cheile din registru"
|
||||||
;LangString remove_conf ${LANG_ENGLISH} "Remove configuration files"
|
;LangString remove_conf ${LANG_ENGLISH} "Remove configuration files"
|
||||||
LangString remove_conf ${LANG_ROMANIAN} "Remove configuration files"
|
LangString remove_conf ${LANG_ROMANIAN} "Eliminați fișierele de configurare"
|
||||||
;LangString remove_firewall ${LANG_ENGLISH} "Remove Windows Firewall rule"
|
;LangString remove_firewall ${LANG_ENGLISH} "Remove Windows Firewall rule"
|
||||||
LangString remove_firewall ${LANG_ROMANIAN} "Remove Windows Firewall rule"
|
LangString remove_firewall ${LANG_ROMANIAN} "Eliminați regula Windows Firewall"
|
||||||
;LangString remove_firewallinfo ${LANG_ENGLISH} "Removing Windows Firewall rule"
|
;LangString remove_firewallinfo ${LANG_ENGLISH} "Removing Windows Firewall rule"
|
||||||
LangString remove_firewallinfo ${LANG_ROMANIAN} "Removing Windows Firewall rule"
|
LangString remove_firewallinfo ${LANG_ROMANIAN} "Se elimină regula Windows Firewall"
|
||||||
;LangString remove_cache ${LANG_ENGLISH} "Remove torrents and cached data"
|
;LangString remove_cache ${LANG_ENGLISH} "Remove torrents and cached data"
|
||||||
LangString remove_cache ${LANG_ROMANIAN} "Remove torrents and cached data"
|
LangString remove_cache ${LANG_ROMANIAN} "Eliminați torrentele și datele din cache"
|
||||||
;LangString uninst_warning ${LANG_ENGLISH} "qBittorrent is running. Please close the application before uninstalling."
|
;LangString uninst_warning ${LANG_ENGLISH} "qBittorrent is running. Please close the application before uninstalling."
|
||||||
LangString uninst_warning ${LANG_ROMANIAN} "qBittorrent is running. Please close the application before uninstalling."
|
LangString uninst_warning ${LANG_ROMANIAN} "qBittorrent rulează. Vă rugăm să închideți aplicația înainte de a o dezinstala."
|
||||||
;LangString uninst_tor_warn ${LANG_ENGLISH} "Not removing .torrent association. It is associated with:"
|
;LangString uninst_tor_warn ${LANG_ENGLISH} "Not removing .torrent association. It is associated with:"
|
||||||
LangString uninst_tor_warn ${LANG_ROMANIAN} "Not removing .torrent association. It is associated with:"
|
LangString uninst_tor_warn ${LANG_ROMANIAN} "Nu se elimină asocierea .torrent. Este asociat cu:"
|
||||||
;LangString uninst_mag_warn ${LANG_ENGLISH} "Not removing magnet association. It is associated with:"
|
;LangString uninst_mag_warn ${LANG_ENGLISH} "Not removing magnet association. It is associated with:"
|
||||||
LangString uninst_mag_warn ${LANG_ROMANIAN} "Not removing magnet association. It is associated with:"
|
LangString uninst_mag_warn ${LANG_ROMANIAN} "Nu se elimină asocierea magnet. Este asociat cu:"
|
||||||
|
|||||||
4
dist/windows/installer.nsi
vendored
4
dist/windows/installer.nsi
vendored
@@ -109,7 +109,7 @@ Section $(inst_torrent) ;"Open .torrent files with qBittorrent"
|
|||||||
|
|
||||||
!insertmacro UAC_AsUser_Call Function inst_torrent_user ${UAC_SYNCREGISTERS}|${UAC_SYNCOUTDIR}|${UAC_SYNCINSTDIR}
|
!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)'
|
System::Call 'Shell32::SHChangeNotify(i ${SHCNE_ASSOCCHANGED}, i ${SHCNF_IDLIST}, p 0, p 0)'
|
||||||
|
|
||||||
SectionEnd
|
SectionEnd
|
||||||
|
|
||||||
@@ -142,7 +142,7 @@ Section $(inst_magnet) ;"Open magnet links with qBittorrent"
|
|||||||
|
|
||||||
!insertmacro UAC_AsUser_Call Function inst_magnet_user ${UAC_SYNCREGISTERS}|${UAC_SYNCOUTDIR}|${UAC_SYNCINSTDIR}
|
!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)'
|
System::Call 'Shell32::SHChangeNotify(i ${SHCNE_ASSOCCHANGED}, i ${SHCNF_IDLIST}, p 0, p 0)'
|
||||||
|
|
||||||
SectionEnd
|
SectionEnd
|
||||||
|
|
||||||
|
|||||||
11
dist/windows/uninstaller.nsi
vendored
11
dist/windows/uninstaller.nsi
vendored
@@ -26,17 +26,17 @@ Section "un.$(remove_associations)" ;"un.Remove file associations"
|
|||||||
DetailPrint "$(uninst_tor_warn) $0"
|
DetailPrint "$(uninst_tor_warn) $0"
|
||||||
DeleteRegValue HKLM "Software\Classes\.torrent" ""
|
DeleteRegValue HKLM "Software\Classes\.torrent" ""
|
||||||
DeleteRegKey /ifempty HKLM "Software\Classes\.torrent"
|
DeleteRegKey /ifempty HKLM "Software\Classes\.torrent"
|
||||||
|
|
||||||
torrent_end:
|
torrent_end:
|
||||||
|
|
||||||
ReadRegStr $0 HKLM "Software\Classes\magnet\shell\open\command" ""
|
ReadRegStr $0 HKLM "Software\Classes\magnet\shell\open\command" ""
|
||||||
StrCmp $0 '"$INSTDIR\qbittorrent.exe" "%1"' 0 magnet_end
|
StrCmp $0 '"$INSTDIR\qbittorrent.exe" "%1"' 0 magnet_end
|
||||||
DetailPrint "$(uninst_mag_warn) $0"
|
DetailPrint "$(uninst_mag_warn) $0"
|
||||||
DeleteRegKey HKLM "Software\Classes\magnet"
|
DeleteRegKey HKLM "Software\Classes\magnet"
|
||||||
|
|
||||||
magnet_end:
|
magnet_end:
|
||||||
|
|
||||||
!insertmacro UAC_AsUser_Call Function un.remove_associations_user ${UAC_SYNCREGISTERS}|${UAC_SYNCOUTDIR}|${UAC_SYNCINSTDIR}
|
!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)'
|
System::Call 'Shell32::SHChangeNotify(i ${SHCNE_ASSOCCHANGED}, i ${SHCNF_IDLIST}, p 0, p 0)'
|
||||||
SectionEnd
|
SectionEnd
|
||||||
|
|
||||||
Function un.remove_associations_user
|
Function un.remove_associations_user
|
||||||
@@ -45,13 +45,12 @@ Function un.remove_associations_user
|
|||||||
DetailPrint "$(uninst_tor_warn) $0"
|
DetailPrint "$(uninst_tor_warn) $0"
|
||||||
DeleteRegValue HKCU "Software\Classes\.torrent" ""
|
DeleteRegValue HKCU "Software\Classes\.torrent" ""
|
||||||
DeleteRegKey /ifempty HKCU "Software\Classes\.torrent"
|
DeleteRegKey /ifempty HKCU "Software\Classes\.torrent"
|
||||||
|
|
||||||
torrent_end:
|
torrent_end:
|
||||||
|
|
||||||
ReadRegStr $0 HKCU "Software\Classes\magnet\shell\open\command" ""
|
ReadRegStr $0 HKCU "Software\Classes\magnet\shell\open\command" ""
|
||||||
StrCmp $0 '"$INSTDIR\qbittorrent.exe" "%1"' 0 magnet_end
|
StrCmp $0 '"$INSTDIR\qbittorrent.exe" "%1"' 0 magnet_end
|
||||||
DetailPrint "$(uninst_mag_warn) $0"
|
DetailPrint "$(uninst_mag_warn) $0"
|
||||||
DeleteRegKey HKCU "Software\Classes\magnet"
|
DeleteRegKey HKCU "Software\Classes\magnet"
|
||||||
|
|
||||||
magnet_end:
|
magnet_end:
|
||||||
FunctionEnd
|
FunctionEnd
|
||||||
|
|
||||||
@@ -62,7 +61,7 @@ Section "un.$(remove_registry)" ;"un.Remove registry keys"
|
|||||||
DeleteRegKey HKLM "Software\qBittorrent"
|
DeleteRegKey HKLM "Software\qBittorrent"
|
||||||
DeleteRegKey HKLM "Software\Classes\qBittorrent"
|
DeleteRegKey HKLM "Software\Classes\qBittorrent"
|
||||||
|
|
||||||
System::Call 'Shell32::SHChangeNotify(i ${SHCNE_ASSOCCHANGED}, i ${SHCNF_IDLIST}, i 0, i 0)'
|
System::Call 'Shell32::SHChangeNotify(i ${SHCNE_ASSOCCHANGED}, i ${SHCNF_IDLIST}, p 0, p 0)'
|
||||||
SectionEnd
|
SectionEnd
|
||||||
|
|
||||||
Section "un.$(remove_firewall)" ;
|
Section "un.$(remove_firewall)" ;
|
||||||
|
|||||||
@@ -96,12 +96,18 @@
|
|||||||
#include "gui/mainwindow.h"
|
#include "gui/mainwindow.h"
|
||||||
#include "gui/shutdownconfirmdialog.h"
|
#include "gui/shutdownconfirmdialog.h"
|
||||||
#include "gui/uithememanager.h"
|
#include "gui/uithememanager.h"
|
||||||
#include "gui/utils.h"
|
|
||||||
#include "gui/windowstate.h"
|
#include "gui/windowstate.h"
|
||||||
|
|
||||||
|
#ifdef Q_OS_WIN
|
||||||
|
#include "base/utils/os.h"
|
||||||
|
#endif // Q_OS_WIN
|
||||||
#endif // DISABLE_GUI
|
#endif // DISABLE_GUI
|
||||||
|
|
||||||
#ifndef DISABLE_WEBUI
|
#ifndef DISABLE_WEBUI
|
||||||
#include "webui/webui.h"
|
#include "webui/webui.h"
|
||||||
|
#ifdef DISABLE_GUI
|
||||||
|
#include "base/utils/password.h"
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
@@ -306,8 +312,8 @@ Application::Application(int &argc, char **argv)
|
|||||||
if (isFileLoggerEnabled())
|
if (isFileLoggerEnabled())
|
||||||
m_fileLogger = new FileLogger(fileLoggerPath(), isFileLoggerBackup(), fileLoggerMaxSize(), isFileLoggerDeleteOld(), fileLoggerAge(), static_cast<FileLogger::FileLogAgeType>(fileLoggerAgeType()));
|
m_fileLogger = new FileLogger(fileLoggerPath(), isFileLoggerBackup(), fileLoggerMaxSize(), isFileLoggerDeleteOld(), fileLoggerAge(), static_cast<FileLogger::FileLogAgeType>(fileLoggerAgeType()));
|
||||||
|
|
||||||
if (m_commandLineArgs.webUiPort > 0) // it will be -1 when user did not set any value
|
if (m_commandLineArgs.webUIPort > 0) // it will be -1 when user did not set any value
|
||||||
Preferences::instance()->setWebUiPort(m_commandLineArgs.webUiPort);
|
Preferences::instance()->setWebUIPort(m_commandLineArgs.webUIPort);
|
||||||
|
|
||||||
if (m_commandLineArgs.torrentingPort > 0) // it will be -1 when user did not set any value
|
if (m_commandLineArgs.torrentingPort > 0) // it will be -1 when user did not set any value
|
||||||
{
|
{
|
||||||
@@ -371,7 +377,7 @@ void Application::setMemoryWorkingSetLimit(const int size)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
m_storeMemoryWorkingSetLimit = size;
|
m_storeMemoryWorkingSetLimit = size;
|
||||||
#ifdef QBT_USES_LIBTORRENT2
|
#if defined(QBT_USES_LIBTORRENT2) && !defined(Q_OS_MACOS)
|
||||||
applyMemoryWorkingSetLimit();
|
applyMemoryWorkingSetLimit();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@@ -763,14 +769,13 @@ void Application::processParams(const QBtCommandLineParameters ¶ms)
|
|||||||
}
|
}
|
||||||
|
|
||||||
int Application::exec()
|
int Application::exec()
|
||||||
try
|
|
||||||
{
|
{
|
||||||
#if !defined(DISABLE_WEBUI) && defined(DISABLE_GUI)
|
#if !defined(DISABLE_WEBUI) && defined(DISABLE_GUI)
|
||||||
const QString loadingStr = tr("WebUI will be started shortly after internal preparations. Please wait...");
|
const QString loadingStr = tr("WebUI will be started shortly after internal preparations. Please wait...");
|
||||||
printf("%s\n", qUtf8Printable(loadingStr));
|
printf("%s\n", qUtf8Printable(loadingStr));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef QBT_USES_LIBTORRENT2
|
#if defined(QBT_USES_LIBTORRENT2) && !defined(Q_OS_MACOS)
|
||||||
applyMemoryWorkingSetLimit();
|
applyMemoryWorkingSetLimit();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -878,14 +883,14 @@ try
|
|||||||
delete m_startupProgressDialog;
|
delete m_startupProgressDialog;
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
auto *pref = Preferences::instance();
|
auto *pref = Preferences::instance();
|
||||||
if (!pref->neverCheckFileAssoc() && (!Preferences::isTorrentFileAssocSet() || !Preferences::isMagnetLinkAssocSet()))
|
if (!pref->neverCheckFileAssoc() && (!Utils::OS::isTorrentFileAssocSet() || !Utils::OS::isMagnetLinkAssocSet()))
|
||||||
{
|
{
|
||||||
if (QMessageBox::question(m_window, tr("Torrent file association")
|
if (QMessageBox::question(m_window, tr("Torrent file association")
|
||||||
, tr("qBittorrent is not the default application for opening torrent files or Magnet links.\nDo you want to make qBittorrent the default application for these?")
|
, tr("qBittorrent is not the default application for opening torrent files or Magnet links.\nDo you want to make qBittorrent the default application for these?")
|
||||||
, QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes) == QMessageBox::Yes)
|
, QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes) == QMessageBox::Yes)
|
||||||
{
|
{
|
||||||
pref->setTorrentFileAssoc(true);
|
Utils::OS::setTorrentFileAssoc(true);
|
||||||
pref->setMagnetLinkAssoc(true);
|
Utils::OS::setMagnetLinkAssoc(true);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -896,25 +901,28 @@ try
|
|||||||
#endif // DISABLE_GUI
|
#endif // DISABLE_GUI
|
||||||
|
|
||||||
#ifndef DISABLE_WEBUI
|
#ifndef DISABLE_WEBUI
|
||||||
|
#ifndef DISABLE_GUI
|
||||||
m_webui = new WebUI(this);
|
m_webui = new WebUI(this);
|
||||||
#ifdef DISABLE_GUI
|
#else
|
||||||
|
const Preferences *pref = Preferences::instance();
|
||||||
|
const QString tempPassword = pref->getWebUIPassword().isEmpty()
|
||||||
|
? Utils::Password::generate() : QString();
|
||||||
|
m_webui = new WebUI(this, (!tempPassword.isEmpty() ? Utils::Password::PBKDF2::generate(tempPassword) : QByteArray()));
|
||||||
if (m_webui->isErrored())
|
if (m_webui->isErrored())
|
||||||
QCoreApplication::exit(EXIT_FAILURE);
|
QCoreApplication::exit(EXIT_FAILURE);
|
||||||
connect(m_webui, &WebUI::fatalError, this, []() { QCoreApplication::exit(EXIT_FAILURE); });
|
connect(m_webui, &WebUI::fatalError, this, []() { QCoreApplication::exit(EXIT_FAILURE); });
|
||||||
|
|
||||||
const Preferences *pref = Preferences::instance();
|
const auto scheme = pref->isWebUIHttpsEnabled() ? u"https"_s : u"http"_s;
|
||||||
|
const auto url = u"%1://localhost:%2\n"_s.arg(scheme, QString::number(pref->getWebUIPort()));
|
||||||
const auto scheme = pref->isWebUiHttpsEnabled() ? u"https"_s : u"http"_s;
|
|
||||||
const auto url = u"%1://localhost:%2\n"_s.arg(scheme, QString::number(pref->getWebUiPort()));
|
|
||||||
const QString mesg = u"\n******** %1 ********\n"_s.arg(tr("Information"))
|
const QString mesg = u"\n******** %1 ********\n"_s.arg(tr("Information"))
|
||||||
+ tr("To control qBittorrent, access the WebUI at: %1").arg(url);
|
+ tr("To control qBittorrent, access the WebUI at: %1").arg(url);
|
||||||
printf("%s\n", qUtf8Printable(mesg));
|
printf("%s\n", qUtf8Printable(mesg));
|
||||||
|
|
||||||
if (pref->getWebUIPassword() == QByteArrayLiteral("ARQ77eY1NUZaQsuDHbIMCA==:0WMRkYTUWVT9wVvdDtHAjU9b3b7uB8NR1Gur2hmQCvCDpm39Q+PsJRJPaCU51dEiz+dTzh8qbPsL8WkFljQYFQ=="))
|
if (!tempPassword.isEmpty())
|
||||||
{
|
{
|
||||||
const QString warning = tr("The Web UI administrator username is: %1").arg(pref->getWebUiUsername()) + u'\n'
|
const QString warning = tr("The WebUI administrator username is: %1").arg(pref->getWebUIUsername()) + u'\n'
|
||||||
+ tr("The Web UI administrator password has not been changed from the default: %1").arg(u"adminadmin"_s) + u'\n'
|
+ tr("The WebUI administrator password was not set. A temporary password is provided for this session: %1").arg(tempPassword) + u'\n'
|
||||||
+ tr("This is a security risk, please change your password in program preferences.") + u'\n';
|
+ tr("You should set your own password in program preferences.") + u'\n';
|
||||||
printf("%s", qUtf8Printable(warning));
|
printf("%s", qUtf8Printable(warning));
|
||||||
}
|
}
|
||||||
#endif // DISABLE_GUI
|
#endif // DISABLE_GUI
|
||||||
@@ -932,21 +940,6 @@ try
|
|||||||
|
|
||||||
return BaseApplication::exec();
|
return BaseApplication::exec();
|
||||||
}
|
}
|
||||||
catch (const RuntimeError &err)
|
|
||||||
{
|
|
||||||
#ifdef DISABLE_GUI
|
|
||||||
fprintf(stderr, "%s", qPrintable(err.message()));
|
|
||||||
#else
|
|
||||||
QMessageBox msgBox;
|
|
||||||
msgBox.setIcon(QMessageBox::Critical);
|
|
||||||
msgBox.setText(QCoreApplication::translate("Application", "Application failed to start."));
|
|
||||||
msgBox.setInformativeText(err.message());
|
|
||||||
msgBox.show(); // Need to be shown or to moveToCenter does not work
|
|
||||||
msgBox.move(Utils::Gui::screenCenter(&msgBox));
|
|
||||||
msgBox.exec();
|
|
||||||
#endif
|
|
||||||
return EXIT_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool Application::isRunning()
|
bool Application::isRunning()
|
||||||
{
|
{
|
||||||
@@ -1092,7 +1085,7 @@ void Application::shutdownCleanup(QSessionManager &manager)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef QBT_USES_LIBTORRENT2
|
#if defined(QBT_USES_LIBTORRENT2) && !defined(Q_OS_MACOS)
|
||||||
void Application::applyMemoryWorkingSetLimit() const
|
void Application::applyMemoryWorkingSetLimit() const
|
||||||
{
|
{
|
||||||
const size_t MiB = 1024 * 1024;
|
const size_t MiB = 1024 * 1024;
|
||||||
@@ -1312,3 +1305,10 @@ void Application::cleanup()
|
|||||||
Utils::Misc::shutdownComputer(m_shutdownAct);
|
Utils::Misc::shutdownComputer(m_shutdownAct);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef DISABLE_WEBUI
|
||||||
|
WebUI *Application::webUI() const
|
||||||
|
{
|
||||||
|
return m_webui;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|||||||
@@ -149,12 +149,16 @@ private slots:
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
#ifndef DISABLE_WEBUI
|
||||||
|
WebUI *webUI() const override;
|
||||||
|
#endif
|
||||||
|
|
||||||
void initializeTranslation();
|
void initializeTranslation();
|
||||||
void processParams(const QBtCommandLineParameters ¶ms);
|
void processParams(const QBtCommandLineParameters ¶ms);
|
||||||
void runExternalProgram(const QString &programTemplate, const BitTorrent::Torrent *torrent) const;
|
void runExternalProgram(const QString &programTemplate, const BitTorrent::Torrent *torrent) const;
|
||||||
void sendNotificationEmail(const BitTorrent::Torrent *torrent);
|
void sendNotificationEmail(const BitTorrent::Torrent *torrent);
|
||||||
|
|
||||||
#ifdef QBT_USES_LIBTORRENT2
|
#if defined(QBT_USES_LIBTORRENT2) && !defined(Q_OS_MACOS)
|
||||||
void applyMemoryWorkingSetLimit() const;
|
void applyMemoryWorkingSetLimit() const;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -349,7 +349,7 @@ QBtCommandLineParameters::QBtCommandLineParameters(const QProcessEnvironment &en
|
|||||||
#elif !defined(Q_OS_WIN)
|
#elif !defined(Q_OS_WIN)
|
||||||
, shouldDaemonize(DAEMON_OPTION.value(env))
|
, shouldDaemonize(DAEMON_OPTION.value(env))
|
||||||
#endif
|
#endif
|
||||||
, webUiPort(WEBUI_PORT_OPTION.value(env, -1))
|
, webUIPort(WEBUI_PORT_OPTION.value(env, -1))
|
||||||
, torrentingPort(TORRENTING_PORT_OPTION.value(env, -1))
|
, torrentingPort(TORRENTING_PORT_OPTION.value(env, -1))
|
||||||
, skipDialog(SKIP_DIALOG_OPTION.value(env))
|
, skipDialog(SKIP_DIALOG_OPTION.value(env))
|
||||||
, profileDir(PROFILE_OPTION.value(env))
|
, profileDir(PROFILE_OPTION.value(env))
|
||||||
@@ -373,7 +373,7 @@ QBtCommandLineParameters parseCommandLine(const QStringList &args)
|
|||||||
|
|
||||||
if ((arg.startsWith(u"--") && !arg.endsWith(u".torrent"))
|
if ((arg.startsWith(u"--") && !arg.endsWith(u".torrent"))
|
||||||
|| (arg.startsWith(u'-') && (arg.size() == 2)))
|
|| (arg.startsWith(u'-') && (arg.size() == 2)))
|
||||||
{
|
{
|
||||||
// Parse known parameters
|
// Parse known parameters
|
||||||
if (arg == SHOW_HELP_OPTION)
|
if (arg == SHOW_HELP_OPTION)
|
||||||
{
|
{
|
||||||
@@ -387,8 +387,8 @@ QBtCommandLineParameters parseCommandLine(const QStringList &args)
|
|||||||
#endif
|
#endif
|
||||||
else if (arg == WEBUI_PORT_OPTION)
|
else if (arg == WEBUI_PORT_OPTION)
|
||||||
{
|
{
|
||||||
result.webUiPort = WEBUI_PORT_OPTION.value(arg);
|
result.webUIPort = WEBUI_PORT_OPTION.value(arg);
|
||||||
if ((result.webUiPort < 1) || (result.webUiPort > 65535))
|
if ((result.webUIPort < 1) || (result.webUIPort > 65535))
|
||||||
throw CommandLineParameterError(QCoreApplication::translate("CMD Options", "%1 must specify a valid port (1 to 65535).")
|
throw CommandLineParameterError(QCoreApplication::translate("CMD Options", "%1 must specify a valid port (1 to 65535).")
|
||||||
.arg(u"--webui-port"_s));
|
.arg(u"--webui-port"_s));
|
||||||
}
|
}
|
||||||
@@ -509,7 +509,7 @@ QString makeUsage(const QString &prgName)
|
|||||||
#endif
|
#endif
|
||||||
+ SHOW_HELP_OPTION.usage() + wrapText(QCoreApplication::translate("CMD Options", "Display this help message and exit")) + u'\n'
|
+ SHOW_HELP_OPTION.usage() + wrapText(QCoreApplication::translate("CMD Options", "Display this help message and exit")) + u'\n'
|
||||||
+ WEBUI_PORT_OPTION.usage(QCoreApplication::translate("CMD Options", "port"))
|
+ WEBUI_PORT_OPTION.usage(QCoreApplication::translate("CMD Options", "port"))
|
||||||
+ wrapText(QCoreApplication::translate("CMD Options", "Change the Web UI port"))
|
+ wrapText(QCoreApplication::translate("CMD Options", "Change the WebUI port"))
|
||||||
+ u'\n'
|
+ u'\n'
|
||||||
+ TORRENTING_PORT_OPTION.usage(QCoreApplication::translate("CMD Options", "port"))
|
+ TORRENTING_PORT_OPTION.usage(QCoreApplication::translate("CMD Options", "port"))
|
||||||
+ wrapText(QCoreApplication::translate("CMD Options", "Change the torrenting port"))
|
+ wrapText(QCoreApplication::translate("CMD Options", "Change the torrenting port"))
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ struct QBtCommandLineParameters
|
|||||||
#elif !defined(Q_OS_WIN)
|
#elif !defined(Q_OS_WIN)
|
||||||
bool shouldDaemonize = false;
|
bool shouldDaemonize = false;
|
||||||
#endif
|
#endif
|
||||||
int webUiPort = -1;
|
int webUIPort = -1;
|
||||||
int torrentingPort = -1;
|
int torrentingPort = -1;
|
||||||
std::optional<bool> skipDialog;
|
std::optional<bool> skipDialog;
|
||||||
Path profileDir;
|
Path profileDir;
|
||||||
|
|||||||
@@ -46,7 +46,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <QCoreApplication>
|
#include <QCoreApplication>
|
||||||
#include <QDebug>
|
#include <QString>
|
||||||
#include <QThread>
|
#include <QThread>
|
||||||
|
|
||||||
#ifndef DISABLE_GUI
|
#ifndef DISABLE_GUI
|
||||||
@@ -86,6 +86,7 @@ using namespace std::chrono_literals;
|
|||||||
void displayVersion();
|
void displayVersion();
|
||||||
bool userAgreesWithLegalNotice();
|
bool userAgreesWithLegalNotice();
|
||||||
void displayBadArgMessage(const QString &message);
|
void displayBadArgMessage(const QString &message);
|
||||||
|
void displayErrorMessage(const QString &message);
|
||||||
|
|
||||||
#ifndef DISABLE_GUI
|
#ifndef DISABLE_GUI
|
||||||
void showSplashScreen();
|
void showSplashScreen();
|
||||||
@@ -114,10 +115,12 @@ int main(int argc, char *argv[])
|
|||||||
Application::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::PassThrough);
|
Application::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::PassThrough);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// `app` must be declared out of try block to allow display message box in case of exception
|
||||||
|
std::unique_ptr<Application> app;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// Create Application
|
// Create Application
|
||||||
auto app = std::make_unique<Application>(argc, argv);
|
app = std::make_unique<Application>(argc, argv);
|
||||||
|
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
// QCoreApplication::applicationDirPath() needs an Application object instantiated first
|
// QCoreApplication::applicationDirPath() needs an Application object instantiated first
|
||||||
@@ -268,7 +271,7 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
catch (const RuntimeError &er)
|
catch (const RuntimeError &er)
|
||||||
{
|
{
|
||||||
qDebug() << er.message();
|
displayErrorMessage(er.message());
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -311,6 +314,30 @@ void displayBadArgMessage(const QString &message)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void displayErrorMessage(const QString &message)
|
||||||
|
{
|
||||||
|
#ifndef DISABLE_GUI
|
||||||
|
if (QApplication::instance())
|
||||||
|
{
|
||||||
|
QMessageBox msgBox;
|
||||||
|
msgBox.setIcon(QMessageBox::Critical);
|
||||||
|
msgBox.setText(QCoreApplication::translate("Main", "An unrecoverable error occurred."));
|
||||||
|
msgBox.setInformativeText(message);
|
||||||
|
msgBox.show(); // Need to be shown or to moveToCenter does not work
|
||||||
|
msgBox.move(Utils::Gui::screenCenter(&msgBox));
|
||||||
|
msgBox.exec();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
const QString errMsg = QCoreApplication::translate("Main", "qBittorrent has encountered an unrecoverable error.") + u'\n' + message + u'\n';
|
||||||
|
fprintf(stderr, "%s", qUtf8Printable(errMsg));
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
const QString errMsg = QCoreApplication::translate("Main", "qBittorrent has encountered an unrecoverable error.") + u'\n' + message + u'\n';
|
||||||
|
fprintf(stderr, "%s", qUtf8Printable(errMsg));
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
bool userAgreesWithLegalNotice()
|
bool userAgreesWithLegalNotice()
|
||||||
{
|
{
|
||||||
Preferences *const pref = Preferences::instance();
|
Preferences *const pref = Preferences::instance();
|
||||||
|
|||||||
@@ -43,6 +43,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <QCoreApplication>
|
#include <QCoreApplication>
|
||||||
|
#include <QMetaObject>
|
||||||
|
|
||||||
#include "base/version.h"
|
#include "base/version.h"
|
||||||
|
|
||||||
@@ -89,7 +90,7 @@ namespace
|
|||||||
const char *msgs[] = {"Catching signal: ", sysSigName[signum], "\nExiting cleanly\n"};
|
const char *msgs[] = {"Catching signal: ", sysSigName[signum], "\nExiting cleanly\n"};
|
||||||
std::for_each(std::begin(msgs), std::end(msgs), safePrint);
|
std::for_each(std::begin(msgs), std::end(msgs), safePrint);
|
||||||
signal(signum, SIG_DFL);
|
signal(signum, SIG_DFL);
|
||||||
QCoreApplication::exit(); // unsafe, but exit anyway
|
QMetaObject::invokeMethod(qApp, [] { QCoreApplication::exit(); }, Qt::QueuedConnection); // unsafe, but exit anyway
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef STACKTRACE
|
#ifdef STACKTRACE
|
||||||
|
|||||||
@@ -99,6 +99,7 @@ add_library(qbt_base STATIC
|
|||||||
utils/io.h
|
utils/io.h
|
||||||
utils/misc.h
|
utils/misc.h
|
||||||
utils/net.h
|
utils/net.h
|
||||||
|
utils/os.h
|
||||||
utils/password.h
|
utils/password.h
|
||||||
utils/random.h
|
utils/random.h
|
||||||
utils/string.h
|
utils/string.h
|
||||||
@@ -184,6 +185,7 @@ add_library(qbt_base STATIC
|
|||||||
utils/io.cpp
|
utils/io.cpp
|
||||||
utils/misc.cpp
|
utils/misc.cpp
|
||||||
utils/net.cpp
|
utils/net.cpp
|
||||||
|
utils/os.cpp
|
||||||
utils/password.cpp
|
utils/password.cpp
|
||||||
utils/random.cpp
|
utils/random.cpp
|
||||||
utils/string.cpp
|
utils/string.cpp
|
||||||
|
|||||||
@@ -99,6 +99,7 @@ HEADERS += \
|
|||||||
$$PWD/utils/io.h \
|
$$PWD/utils/io.h \
|
||||||
$$PWD/utils/misc.h \
|
$$PWD/utils/misc.h \
|
||||||
$$PWD/utils/net.h \
|
$$PWD/utils/net.h \
|
||||||
|
$$PWD/utils/os.h \
|
||||||
$$PWD/utils/password.h \
|
$$PWD/utils/password.h \
|
||||||
$$PWD/utils/random.h \
|
$$PWD/utils/random.h \
|
||||||
$$PWD/utils/string.h \
|
$$PWD/utils/string.h \
|
||||||
@@ -184,6 +185,7 @@ SOURCES += \
|
|||||||
$$PWD/utils/io.cpp \
|
$$PWD/utils/io.cpp \
|
||||||
$$PWD/utils/misc.cpp \
|
$$PWD/utils/misc.cpp \
|
||||||
$$PWD/utils/net.cpp \
|
$$PWD/utils/net.cpp \
|
||||||
|
$$PWD/utils/os.cpp \
|
||||||
$$PWD/utils/password.cpp \
|
$$PWD/utils/password.cpp \
|
||||||
$$PWD/utils/random.cpp \
|
$$PWD/utils/random.cpp \
|
||||||
$$PWD/utils/string.cpp \
|
$$PWD/utils/string.cpp \
|
||||||
|
|||||||
@@ -288,7 +288,7 @@ namespace BitTorrent
|
|||||||
Q_DISABLE_COPY_MOVE(Worker)
|
Q_DISABLE_COPY_MOVE(Worker)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Worker(const Path &dbPath, QReadWriteLock &dbLock);
|
Worker(const Path &dbPath, QReadWriteLock &dbLock, QObject *parent = nullptr);
|
||||||
|
|
||||||
void run() override;
|
void run() override;
|
||||||
void requestInterruption();
|
void requestInterruption();
|
||||||
@@ -332,7 +332,7 @@ BitTorrent::DBResumeDataStorage::DBResumeDataStorage(const Path &dbPath, QObject
|
|||||||
updateDB(dbVersion);
|
updateDB(dbVersion);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_asyncWorker = new Worker(dbPath, m_dbLock);
|
m_asyncWorker = new Worker(dbPath, m_dbLock, this);
|
||||||
m_asyncWorker->start();
|
m_asyncWorker->start();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -611,10 +611,15 @@ void BitTorrent::DBResumeDataStorage::updateDB(const int fromVersion) const
|
|||||||
|
|
||||||
if (fromVersion <= 4)
|
if (fromVersion <= 4)
|
||||||
{
|
{
|
||||||
const auto alterTableTorrentsQuery = u"ALTER TABLE %1 ADD %2"_s
|
const auto testQuery = u"SELECT COUNT(%1) FROM %2;"_s
|
||||||
.arg(quoted(DB_TABLE_TORRENTS), makeColumnDefinition(DB_COLUMN_INACTIVE_SEEDING_TIME_LIMIT, "INTEGER NOT NULL DEFAULT -2"));
|
.arg(quoted(DB_COLUMN_INACTIVE_SEEDING_TIME_LIMIT.name), quoted(DB_TABLE_TORRENTS));
|
||||||
if (!query.exec(alterTableTorrentsQuery))
|
if (!query.exec(testQuery))
|
||||||
throw RuntimeError(query.lastError().text());
|
{
|
||||||
|
const auto alterTableTorrentsQuery = u"ALTER TABLE %1 ADD %2"_s
|
||||||
|
.arg(quoted(DB_TABLE_TORRENTS), makeColumnDefinition(DB_COLUMN_INACTIVE_SEEDING_TIME_LIMIT, "INTEGER NOT NULL DEFAULT -2"));
|
||||||
|
if (!query.exec(alterTableTorrentsQuery))
|
||||||
|
throw RuntimeError(query.lastError().text());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const QString updateMetaVersionQuery = makeUpdateStatement(DB_TABLE_META, {DB_COLUMN_NAME, DB_COLUMN_VALUE});
|
const QString updateMetaVersionQuery = makeUpdateStatement(DB_TABLE_META, {DB_COLUMN_NAME, DB_COLUMN_VALUE});
|
||||||
@@ -653,8 +658,9 @@ void BitTorrent::DBResumeDataStorage::enableWALMode() const
|
|||||||
throw RuntimeError(tr("WAL mode is probably unsupported due to filesystem limitations."));
|
throw RuntimeError(tr("WAL mode is probably unsupported due to filesystem limitations."));
|
||||||
}
|
}
|
||||||
|
|
||||||
BitTorrent::DBResumeDataStorage::Worker::Worker(const Path &dbPath, QReadWriteLock &dbLock)
|
BitTorrent::DBResumeDataStorage::Worker::Worker(const Path &dbPath, QReadWriteLock &dbLock, QObject *parent)
|
||||||
: m_path {dbPath}
|
: QThread(parent)
|
||||||
|
, m_path {dbPath}
|
||||||
, m_dbLock {dbLock}
|
, m_dbLock {dbLock}
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2435,6 +2435,11 @@ bool SessionImpl::cancelDownloadMetadata(const TorrentID &id)
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
const lt::torrent_handle nativeHandle = downloadedMetadataIter.value();
|
const lt::torrent_handle nativeHandle = downloadedMetadataIter.value();
|
||||||
|
m_downloadedMetadata.erase(downloadedMetadataIter);
|
||||||
|
|
||||||
|
if (!nativeHandle.is_valid())
|
||||||
|
return true;
|
||||||
|
|
||||||
#ifdef QBT_USES_LIBTORRENT2
|
#ifdef QBT_USES_LIBTORRENT2
|
||||||
const InfoHash infoHash {nativeHandle.info_hashes()};
|
const InfoHash infoHash {nativeHandle.info_hashes()};
|
||||||
if (infoHash.isHybrid())
|
if (infoHash.isHybrid())
|
||||||
@@ -2445,7 +2450,7 @@ bool SessionImpl::cancelDownloadMetadata(const TorrentID &id)
|
|||||||
m_downloadedMetadata.remove((altID == downloadedMetadataIter.key()) ? id : altID);
|
m_downloadedMetadata.remove((altID == downloadedMetadataIter.key()) ? id : altID);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
m_downloadedMetadata.erase(downloadedMetadataIter);
|
|
||||||
m_nativeSession->remove_torrent(nativeHandle, lt::session::delete_files);
|
m_nativeSession->remove_torrent(nativeHandle, lt::session::delete_files);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -2950,7 +2955,7 @@ bool SessionImpl::addTorrent_impl(const std::variant<MagnetUri, TorrentInfo> &so
|
|||||||
}
|
}
|
||||||
|
|
||||||
void SessionImpl::findIncompleteFiles(const TorrentInfo &torrentInfo, const Path &savePath
|
void SessionImpl::findIncompleteFiles(const TorrentInfo &torrentInfo, const Path &savePath
|
||||||
, const Path &downloadPath, const PathList &filePaths) const
|
, const Path &downloadPath, const PathList &filePaths) const
|
||||||
{
|
{
|
||||||
Q_ASSERT(filePaths.isEmpty() || (filePaths.size() == torrentInfo.filesCount()));
|
Q_ASSERT(filePaths.isEmpty() || (filePaths.size() == torrentInfo.filesCount()));
|
||||||
|
|
||||||
@@ -3143,8 +3148,16 @@ void SessionImpl::generateResumeData()
|
|||||||
void SessionImpl::saveResumeData()
|
void SessionImpl::saveResumeData()
|
||||||
{
|
{
|
||||||
for (const TorrentImpl *torrent : asConst(m_torrents))
|
for (const TorrentImpl *torrent : asConst(m_torrents))
|
||||||
torrent->nativeHandle().save_resume_data(lt::torrent_handle::only_if_modified);
|
{
|
||||||
m_numResumeData += m_torrents.size();
|
// When the session is terminated due to unrecoverable error
|
||||||
|
// some of the torrent handles can be corrupted
|
||||||
|
try
|
||||||
|
{
|
||||||
|
torrent->nativeHandle().save_resume_data(lt::torrent_handle::only_if_modified);
|
||||||
|
++m_numResumeData;
|
||||||
|
}
|
||||||
|
catch (const std::exception &) {}
|
||||||
|
}
|
||||||
|
|
||||||
// clear queued storage move jobs except the current ongoing one
|
// clear queued storage move jobs except the current ongoing one
|
||||||
if (m_moveStorageQueue.size() > 1)
|
if (m_moveStorageQueue.size() > 1)
|
||||||
@@ -5547,10 +5560,13 @@ void SessionImpl::handleAlert(const lt::alert *a)
|
|||||||
dispatchTorrentAlert(static_cast<const lt::torrent_alert *>(a));
|
dispatchTorrentAlert(static_cast<const lt::torrent_alert *>(a));
|
||||||
break;
|
break;
|
||||||
case lt::state_update_alert::alert_type:
|
case lt::state_update_alert::alert_type:
|
||||||
handleStateUpdateAlert(static_cast<const lt::state_update_alert*>(a));
|
handleStateUpdateAlert(static_cast<const lt::state_update_alert *>(a));
|
||||||
|
break;
|
||||||
|
case lt::session_error_alert::alert_type:
|
||||||
|
handleSessionErrorAlert(static_cast<const lt::session_error_alert *>(a));
|
||||||
break;
|
break;
|
||||||
case lt::session_stats_alert::alert_type:
|
case lt::session_stats_alert::alert_type:
|
||||||
handleSessionStatsAlert(static_cast<const lt::session_stats_alert*>(a));
|
handleSessionStatsAlert(static_cast<const lt::session_stats_alert *>(a));
|
||||||
break;
|
break;
|
||||||
case lt::tracker_announce_alert::alert_type:
|
case lt::tracker_announce_alert::alert_type:
|
||||||
case lt::tracker_error_alert::alert_type:
|
case lt::tracker_error_alert::alert_type:
|
||||||
@@ -5559,56 +5575,59 @@ void SessionImpl::handleAlert(const lt::alert *a)
|
|||||||
handleTrackerAlert(static_cast<const lt::tracker_alert *>(a));
|
handleTrackerAlert(static_cast<const lt::tracker_alert *>(a));
|
||||||
break;
|
break;
|
||||||
case lt::file_error_alert::alert_type:
|
case lt::file_error_alert::alert_type:
|
||||||
handleFileErrorAlert(static_cast<const lt::file_error_alert*>(a));
|
handleFileErrorAlert(static_cast<const lt::file_error_alert *>(a));
|
||||||
break;
|
break;
|
||||||
case lt::add_torrent_alert::alert_type:
|
case lt::add_torrent_alert::alert_type:
|
||||||
// handled separately
|
// handled separately
|
||||||
break;
|
break;
|
||||||
case lt::torrent_removed_alert::alert_type:
|
case lt::torrent_removed_alert::alert_type:
|
||||||
handleTorrentRemovedAlert(static_cast<const lt::torrent_removed_alert*>(a));
|
handleTorrentRemovedAlert(static_cast<const lt::torrent_removed_alert *>(a));
|
||||||
break;
|
break;
|
||||||
case lt::torrent_deleted_alert::alert_type:
|
case lt::torrent_deleted_alert::alert_type:
|
||||||
handleTorrentDeletedAlert(static_cast<const lt::torrent_deleted_alert*>(a));
|
handleTorrentDeletedAlert(static_cast<const lt::torrent_deleted_alert *>(a));
|
||||||
break;
|
break;
|
||||||
case lt::torrent_delete_failed_alert::alert_type:
|
case lt::torrent_delete_failed_alert::alert_type:
|
||||||
handleTorrentDeleteFailedAlert(static_cast<const lt::torrent_delete_failed_alert*>(a));
|
handleTorrentDeleteFailedAlert(static_cast<const lt::torrent_delete_failed_alert *>(a));
|
||||||
break;
|
break;
|
||||||
case lt::portmap_error_alert::alert_type:
|
case lt::portmap_error_alert::alert_type:
|
||||||
handlePortmapWarningAlert(static_cast<const lt::portmap_error_alert*>(a));
|
handlePortmapWarningAlert(static_cast<const lt::portmap_error_alert *>(a));
|
||||||
break;
|
break;
|
||||||
case lt::portmap_alert::alert_type:
|
case lt::portmap_alert::alert_type:
|
||||||
handlePortmapAlert(static_cast<const lt::portmap_alert*>(a));
|
handlePortmapAlert(static_cast<const lt::portmap_alert *>(a));
|
||||||
break;
|
break;
|
||||||
case lt::peer_blocked_alert::alert_type:
|
case lt::peer_blocked_alert::alert_type:
|
||||||
handlePeerBlockedAlert(static_cast<const lt::peer_blocked_alert*>(a));
|
handlePeerBlockedAlert(static_cast<const lt::peer_blocked_alert *>(a));
|
||||||
break;
|
break;
|
||||||
case lt::peer_ban_alert::alert_type:
|
case lt::peer_ban_alert::alert_type:
|
||||||
handlePeerBanAlert(static_cast<const lt::peer_ban_alert*>(a));
|
handlePeerBanAlert(static_cast<const lt::peer_ban_alert *>(a));
|
||||||
break;
|
break;
|
||||||
case lt::url_seed_alert::alert_type:
|
case lt::url_seed_alert::alert_type:
|
||||||
handleUrlSeedAlert(static_cast<const lt::url_seed_alert*>(a));
|
handleUrlSeedAlert(static_cast<const lt::url_seed_alert *>(a));
|
||||||
break;
|
break;
|
||||||
case lt::listen_succeeded_alert::alert_type:
|
case lt::listen_succeeded_alert::alert_type:
|
||||||
handleListenSucceededAlert(static_cast<const lt::listen_succeeded_alert*>(a));
|
handleListenSucceededAlert(static_cast<const lt::listen_succeeded_alert *>(a));
|
||||||
break;
|
break;
|
||||||
case lt::listen_failed_alert::alert_type:
|
case lt::listen_failed_alert::alert_type:
|
||||||
handleListenFailedAlert(static_cast<const lt::listen_failed_alert*>(a));
|
handleListenFailedAlert(static_cast<const lt::listen_failed_alert *>(a));
|
||||||
break;
|
break;
|
||||||
case lt::external_ip_alert::alert_type:
|
case lt::external_ip_alert::alert_type:
|
||||||
handleExternalIPAlert(static_cast<const lt::external_ip_alert*>(a));
|
handleExternalIPAlert(static_cast<const lt::external_ip_alert *>(a));
|
||||||
break;
|
break;
|
||||||
case lt::alerts_dropped_alert::alert_type:
|
case lt::alerts_dropped_alert::alert_type:
|
||||||
handleAlertsDroppedAlert(static_cast<const lt::alerts_dropped_alert *>(a));
|
handleAlertsDroppedAlert(static_cast<const lt::alerts_dropped_alert *>(a));
|
||||||
break;
|
break;
|
||||||
case lt::storage_moved_alert::alert_type:
|
case lt::storage_moved_alert::alert_type:
|
||||||
handleStorageMovedAlert(static_cast<const lt::storage_moved_alert*>(a));
|
handleStorageMovedAlert(static_cast<const lt::storage_moved_alert *>(a));
|
||||||
break;
|
break;
|
||||||
case lt::storage_moved_failed_alert::alert_type:
|
case lt::storage_moved_failed_alert::alert_type:
|
||||||
handleStorageMovedFailedAlert(static_cast<const lt::storage_moved_failed_alert*>(a));
|
handleStorageMovedFailedAlert(static_cast<const lt::storage_moved_failed_alert *>(a));
|
||||||
break;
|
break;
|
||||||
case lt::socks5_alert::alert_type:
|
case lt::socks5_alert::alert_type:
|
||||||
handleSocks5Alert(static_cast<const lt::socks5_alert *>(a));
|
handleSocks5Alert(static_cast<const lt::socks5_alert *>(a));
|
||||||
break;
|
break;
|
||||||
|
case lt::i2p_alert::alert_type:
|
||||||
|
handleI2PAlert(static_cast<const lt::i2p_alert *>(a));
|
||||||
|
break;
|
||||||
#ifdef QBT_USES_LIBTORRENT2
|
#ifdef QBT_USES_LIBTORRENT2
|
||||||
case lt::torrent_conflict_alert::alert_type:
|
case lt::torrent_conflict_alert::alert_type:
|
||||||
handleTorrentConflictAlert(static_cast<const lt::torrent_conflict_alert *>(a));
|
handleTorrentConflictAlert(static_cast<const lt::torrent_conflict_alert *>(a));
|
||||||
@@ -5915,6 +5934,12 @@ void SessionImpl::handleExternalIPAlert(const lt::external_ip_alert *p)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SessionImpl::handleSessionErrorAlert(const lt::session_error_alert *p) const
|
||||||
|
{
|
||||||
|
LogMsg(tr("BitTorrent session encountered a serious error. Reason: \"%1\"")
|
||||||
|
.arg(QString::fromStdString(p->message())), Log::CRITICAL);
|
||||||
|
}
|
||||||
|
|
||||||
void SessionImpl::handleSessionStatsAlert(const lt::session_stats_alert *p)
|
void SessionImpl::handleSessionStatsAlert(const lt::session_stats_alert *p)
|
||||||
{
|
{
|
||||||
if (m_refreshEnqueued)
|
if (m_refreshEnqueued)
|
||||||
@@ -6109,6 +6134,15 @@ void SessionImpl::handleSocks5Alert(const lt::socks5_alert *p) const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SessionImpl::handleI2PAlert(const lt::i2p_alert *p) const
|
||||||
|
{
|
||||||
|
if (p->error)
|
||||||
|
{
|
||||||
|
LogMsg(tr("I2P error. Message: \"%1\".")
|
||||||
|
.arg(QString::fromStdString(p->message())), Log::WARNING);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void SessionImpl::handleTrackerAlert(const lt::tracker_alert *a)
|
void SessionImpl::handleTrackerAlert(const lt::tracker_alert *a)
|
||||||
{
|
{
|
||||||
TorrentImpl *torrent = m_torrents.value(a->handle.info_hash());
|
TorrentImpl *torrent = m_torrents.value(a->handle.info_hash());
|
||||||
|
|||||||
@@ -564,11 +564,13 @@ namespace BitTorrent
|
|||||||
void handleListenSucceededAlert(const lt::listen_succeeded_alert *p);
|
void handleListenSucceededAlert(const lt::listen_succeeded_alert *p);
|
||||||
void handleListenFailedAlert(const lt::listen_failed_alert *p);
|
void handleListenFailedAlert(const lt::listen_failed_alert *p);
|
||||||
void handleExternalIPAlert(const lt::external_ip_alert *p);
|
void handleExternalIPAlert(const lt::external_ip_alert *p);
|
||||||
|
void handleSessionErrorAlert(const lt::session_error_alert *p) const;
|
||||||
void handleSessionStatsAlert(const lt::session_stats_alert *p);
|
void handleSessionStatsAlert(const lt::session_stats_alert *p);
|
||||||
void handleAlertsDroppedAlert(const lt::alerts_dropped_alert *p) const;
|
void handleAlertsDroppedAlert(const lt::alerts_dropped_alert *p) const;
|
||||||
void handleStorageMovedAlert(const lt::storage_moved_alert *p);
|
void handleStorageMovedAlert(const lt::storage_moved_alert *p);
|
||||||
void handleStorageMovedFailedAlert(const lt::storage_moved_failed_alert *p);
|
void handleStorageMovedFailedAlert(const lt::storage_moved_failed_alert *p);
|
||||||
void handleSocks5Alert(const lt::socks5_alert *p) const;
|
void handleSocks5Alert(const lt::socks5_alert *p) const;
|
||||||
|
void handleI2PAlert(const lt::i2p_alert *p) const;
|
||||||
void handleTrackerAlert(const lt::tracker_alert *a);
|
void handleTrackerAlert(const lt::tracker_alert *a);
|
||||||
#ifdef QBT_USES_LIBTORRENT2
|
#ifdef QBT_USES_LIBTORRENT2
|
||||||
void handleTorrentConflictAlert(const lt::torrent_conflict_alert *a);
|
void handleTorrentConflictAlert(const lt::torrent_conflict_alert *a);
|
||||||
|
|||||||
@@ -51,6 +51,7 @@
|
|||||||
#include <QStringList>
|
#include <QStringList>
|
||||||
#include <QUrl>
|
#include <QUrl>
|
||||||
|
|
||||||
|
#include "base/exceptions.h"
|
||||||
#include "base/global.h"
|
#include "base/global.h"
|
||||||
#include "base/logger.h"
|
#include "base/logger.h"
|
||||||
#include "base/preferences.h"
|
#include "base/preferences.h"
|
||||||
@@ -599,6 +600,9 @@ void TorrentImpl::replaceTrackers(QVector<TrackerEntry> trackers)
|
|||||||
{
|
{
|
||||||
// TODO: use std::erase_if() in C++20
|
// TODO: use std::erase_if() in C++20
|
||||||
trackers.erase(std::remove_if(trackers.begin(), trackers.end(), [](const TrackerEntry &entry) { return entry.url.isEmpty(); }), trackers.end());
|
trackers.erase(std::remove_if(trackers.begin(), trackers.end(), [](const TrackerEntry &entry) { return entry.url.isEmpty(); }), trackers.end());
|
||||||
|
// Filter out duplicate trackers
|
||||||
|
const auto uniqueTrackers = QSet<TrackerEntry>(trackers.cbegin(), trackers.cend());
|
||||||
|
trackers = QVector<TrackerEntry>(uniqueTrackers.cbegin(), uniqueTrackers.cend());
|
||||||
std::sort(trackers.begin(), trackers.end()
|
std::sort(trackers.begin(), trackers.end()
|
||||||
, [](const TrackerEntry &lhs, const TrackerEntry &rhs) { return lhs.tier < rhs.tier; });
|
, [](const TrackerEntry &lhs, const TrackerEntry &rhs) { return lhs.tier < rhs.tier; });
|
||||||
|
|
||||||
@@ -1602,7 +1606,8 @@ void TorrentImpl::applyFirstLastPiecePriority(const bool enabled)
|
|||||||
|
|
||||||
void TorrentImpl::fileSearchFinished(const Path &savePath, const PathList &fileNames)
|
void TorrentImpl::fileSearchFinished(const Path &savePath, const PathList &fileNames)
|
||||||
{
|
{
|
||||||
endReceivedMetadataHandling(savePath, fileNames);
|
if (m_maintenanceJob == MaintenanceJob::HandleMetadata)
|
||||||
|
endReceivedMetadataHandling(savePath, fileNames);
|
||||||
}
|
}
|
||||||
|
|
||||||
TrackerEntry TorrentImpl::updateTrackerEntry(const lt::announce_entry &announceEntry, const QMap<TrackerEntry::Endpoint, int> &updateInfo)
|
TrackerEntry TorrentImpl::updateTrackerEntry(const lt::announce_entry &announceEntry, const QMap<TrackerEntry::Endpoint, int> &updateInfo)
|
||||||
@@ -1635,7 +1640,13 @@ std::shared_ptr<const libtorrent::torrent_info> TorrentImpl::nativeTorrentInfo()
|
|||||||
|
|
||||||
void TorrentImpl::endReceivedMetadataHandling(const Path &savePath, const PathList &fileNames)
|
void TorrentImpl::endReceivedMetadataHandling(const Path &savePath, const PathList &fileNames)
|
||||||
{
|
{
|
||||||
|
Q_ASSERT(m_maintenanceJob == MaintenanceJob::HandleMetadata);
|
||||||
|
if (Q_UNLIKELY(m_maintenanceJob != MaintenanceJob::HandleMetadata))
|
||||||
|
return;
|
||||||
|
|
||||||
Q_ASSERT(m_filePaths.isEmpty());
|
Q_ASSERT(m_filePaths.isEmpty());
|
||||||
|
if (Q_UNLIKELY(!m_filePaths.isEmpty()))
|
||||||
|
m_filePaths.clear();
|
||||||
|
|
||||||
lt::add_torrent_params &p = m_ltAddTorrentParams;
|
lt::add_torrent_params &p = m_ltAddTorrentParams;
|
||||||
|
|
||||||
@@ -1644,7 +1655,7 @@ void TorrentImpl::endReceivedMetadataHandling(const Path &savePath, const PathLi
|
|||||||
m_filePriorities.reserve(filesCount());
|
m_filePriorities.reserve(filesCount());
|
||||||
const auto nativeIndexes = m_torrentInfo.nativeIndexes();
|
const auto nativeIndexes = m_torrentInfo.nativeIndexes();
|
||||||
p.file_priorities = resized(p.file_priorities, metadata->files().num_files()
|
p.file_priorities = resized(p.file_priorities, metadata->files().num_files()
|
||||||
, LT::toNative(p.file_priorities.empty() ? DownloadPriority::Normal : DownloadPriority::Ignored));
|
, LT::toNative(p.file_priorities.empty() ? DownloadPriority::Normal : DownloadPriority::Ignored));
|
||||||
|
|
||||||
m_completedFiles.fill(static_cast<bool>(p.flags & lt::torrent_flags::seed_mode), filesCount());
|
m_completedFiles.fill(static_cast<bool>(p.flags & lt::torrent_flags::seed_mode), filesCount());
|
||||||
m_filesProgress.resize(filesCount());
|
m_filesProgress.resize(filesCount());
|
||||||
@@ -1694,6 +1705,7 @@ void TorrentImpl::endReceivedMetadataHandling(const Path &savePath, const PathLi
|
|||||||
}
|
}
|
||||||
|
|
||||||
void TorrentImpl::reload()
|
void TorrentImpl::reload()
|
||||||
|
try
|
||||||
{
|
{
|
||||||
m_completedFiles.fill(false);
|
m_completedFiles.fill(false);
|
||||||
m_filesProgress.fill(0);
|
m_filesProgress.fill(0);
|
||||||
@@ -1736,6 +1748,11 @@ void TorrentImpl::reload()
|
|||||||
|
|
||||||
updateState();
|
updateState();
|
||||||
}
|
}
|
||||||
|
catch (const lt::system_error &err)
|
||||||
|
{
|
||||||
|
throw RuntimeError(tr("Failed to reload torrent. Torrent: %1. Reason: %2")
|
||||||
|
.arg(id().toString(), QString::fromLocal8Bit(err.what())));
|
||||||
|
}
|
||||||
|
|
||||||
void TorrentImpl::pause()
|
void TorrentImpl::pause()
|
||||||
{
|
{
|
||||||
@@ -1794,6 +1811,7 @@ void TorrentImpl::moveStorage(const Path &newPath, const MoveStorageContext cont
|
|||||||
{
|
{
|
||||||
if (!hasMetadata())
|
if (!hasMetadata())
|
||||||
{
|
{
|
||||||
|
m_savePath = newPath;
|
||||||
m_session->handleTorrentSavePathChanged(this);
|
m_session->handleTorrentSavePathChanged(this);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,6 +36,7 @@
|
|||||||
class QString;
|
class QString;
|
||||||
|
|
||||||
class Path;
|
class Path;
|
||||||
|
class WebUI;
|
||||||
struct QBtCommandLineParameters;
|
struct QBtCommandLineParameters;
|
||||||
|
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
@@ -83,4 +84,8 @@ public:
|
|||||||
virtual MemoryPriority processMemoryPriority() const = 0;
|
virtual MemoryPriority processMemoryPriority() const = 0;
|
||||||
virtual void setProcessMemoryPriority(MemoryPriority priority) = 0;
|
virtual void setProcessMemoryPriority(MemoryPriority priority) = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef DISABLE_WEBUI
|
||||||
|
virtual WebUI *webUI() const = 0;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -62,11 +62,10 @@ public:
|
|||||||
{
|
{
|
||||||
const QDateTime now = QDateTime::currentDateTime();
|
const QDateTime now = QDateTime::currentDateTime();
|
||||||
QList<QNetworkCookie> cookies = Preferences::instance()->getNetworkCookies();
|
QList<QNetworkCookie> cookies = Preferences::instance()->getNetworkCookies();
|
||||||
for (const QNetworkCookie &cookie : asConst(Preferences::instance()->getNetworkCookies()))
|
cookies.erase(std::remove_if(cookies.begin(), cookies.end(), [&now](const QNetworkCookie &cookie)
|
||||||
{
|
{
|
||||||
if (cookie.isSessionCookie() || (cookie.expirationDate() <= now))
|
return cookie.isSessionCookie() || (cookie.expirationDate() <= now);
|
||||||
cookies.removeAll(cookie);
|
}), cookies.end());
|
||||||
}
|
|
||||||
|
|
||||||
setAllCookies(cookies);
|
setAllCookies(cookies);
|
||||||
}
|
}
|
||||||
@@ -75,11 +74,10 @@ public:
|
|||||||
{
|
{
|
||||||
const QDateTime now = QDateTime::currentDateTime();
|
const QDateTime now = QDateTime::currentDateTime();
|
||||||
QList<QNetworkCookie> cookies = allCookies();
|
QList<QNetworkCookie> cookies = allCookies();
|
||||||
for (const QNetworkCookie &cookie : asConst(allCookies()))
|
cookies.erase(std::remove_if(cookies.begin(), cookies.end(), [&now](const QNetworkCookie &cookie)
|
||||||
{
|
{
|
||||||
if (cookie.isSessionCookie() || (cookie.expirationDate() <= now))
|
return cookie.isSessionCookie() || (cookie.expirationDate() <= now);
|
||||||
cookies.removeAll(cookie);
|
}), cookies.end());
|
||||||
}
|
|
||||||
|
|
||||||
Preferences::instance()->setNetworkCookies(cookies);
|
Preferences::instance()->setNetworkCookies(cookies);
|
||||||
}
|
}
|
||||||
@@ -91,11 +89,10 @@ public:
|
|||||||
{
|
{
|
||||||
const QDateTime now = QDateTime::currentDateTime();
|
const QDateTime now = QDateTime::currentDateTime();
|
||||||
QList<QNetworkCookie> cookies = QNetworkCookieJar::cookiesForUrl(url);
|
QList<QNetworkCookie> cookies = QNetworkCookieJar::cookiesForUrl(url);
|
||||||
for (const QNetworkCookie &cookie : asConst(QNetworkCookieJar::cookiesForUrl(url)))
|
cookies.erase(std::remove_if(cookies.begin(), cookies.end(), [&now](const QNetworkCookie &cookie)
|
||||||
{
|
{
|
||||||
if (!cookie.isSessionCookie() && (cookie.expirationDate() <= now))
|
return !cookie.isSessionCookie() && (cookie.expirationDate() <= now);
|
||||||
cookies.removeAll(cookie);
|
}), cookies.end());
|
||||||
}
|
|
||||||
|
|
||||||
return cookies;
|
return cookies;
|
||||||
}
|
}
|
||||||
@@ -104,11 +101,10 @@ public:
|
|||||||
{
|
{
|
||||||
const QDateTime now = QDateTime::currentDateTime();
|
const QDateTime now = QDateTime::currentDateTime();
|
||||||
QList<QNetworkCookie> cookies = cookieList;
|
QList<QNetworkCookie> cookies = cookieList;
|
||||||
for (const QNetworkCookie &cookie : cookieList)
|
cookies.erase(std::remove_if(cookies.begin(), cookies.end(), [&now](const QNetworkCookie &cookie)
|
||||||
{
|
{
|
||||||
if (!cookie.isSessionCookie() && (cookie.expirationDate() <= now))
|
return !cookie.isSessionCookie() && (cookie.expirationDate() <= now);
|
||||||
cookies.removeAll(cookie);
|
}), cookies.end());
|
||||||
}
|
|
||||||
|
|
||||||
return QNetworkCookieJar::setCookiesFromUrl(cookies, url);
|
return QNetworkCookieJar::setCookiesFromUrl(cookies, url);
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -169,26 +169,26 @@ public:
|
|||||||
void setSearchEnabled(bool enabled);
|
void setSearchEnabled(bool enabled);
|
||||||
|
|
||||||
// HTTP Server
|
// HTTP Server
|
||||||
bool isWebUiEnabled() const;
|
bool isWebUIEnabled() const;
|
||||||
void setWebUiEnabled(bool enabled);
|
void setWebUIEnabled(bool enabled);
|
||||||
QString getServerDomains() const;
|
QString getServerDomains() const;
|
||||||
void setServerDomains(const QString &str);
|
void setServerDomains(const QString &str);
|
||||||
QString getWebUiAddress() const;
|
QString getWebUIAddress() const;
|
||||||
void setWebUiAddress(const QString &addr);
|
void setWebUIAddress(const QString &addr);
|
||||||
quint16 getWebUiPort() const;
|
quint16 getWebUIPort() const;
|
||||||
void setWebUiPort(quint16 port);
|
void setWebUIPort(quint16 port);
|
||||||
bool useUPnPForWebUIPort() const;
|
bool useUPnPForWebUIPort() const;
|
||||||
void setUPnPForWebUIPort(bool enabled);
|
void setUPnPForWebUIPort(bool enabled);
|
||||||
|
|
||||||
// Authentication
|
// Authentication
|
||||||
bool isWebUiLocalAuthEnabled() const;
|
bool isWebUILocalAuthEnabled() const;
|
||||||
void setWebUiLocalAuthEnabled(bool enabled);
|
void setWebUILocalAuthEnabled(bool enabled);
|
||||||
bool isWebUiAuthSubnetWhitelistEnabled() const;
|
bool isWebUIAuthSubnetWhitelistEnabled() const;
|
||||||
void setWebUiAuthSubnetWhitelistEnabled(bool enabled);
|
void setWebUIAuthSubnetWhitelistEnabled(bool enabled);
|
||||||
QVector<Utils::Net::Subnet> getWebUiAuthSubnetWhitelist() const;
|
QVector<Utils::Net::Subnet> getWebUIAuthSubnetWhitelist() const;
|
||||||
void setWebUiAuthSubnetWhitelist(QStringList subnets);
|
void setWebUIAuthSubnetWhitelist(QStringList subnets);
|
||||||
QString getWebUiUsername() const;
|
QString getWebUIUsername() const;
|
||||||
void setWebUiUsername(const QString &username);
|
void setWebUIUsername(const QString &username);
|
||||||
QByteArray getWebUIPassword() const;
|
QByteArray getWebUIPassword() const;
|
||||||
void setWebUIPassword(const QByteArray &password);
|
void setWebUIPassword(const QByteArray &password);
|
||||||
int getWebUIMaxAuthFailCount() const;
|
int getWebUIMaxAuthFailCount() const;
|
||||||
@@ -201,26 +201,26 @@ public:
|
|||||||
void setWebAPISessionCookieName(const QString &cookieName);
|
void setWebAPISessionCookieName(const QString &cookieName);
|
||||||
|
|
||||||
// WebUI security
|
// WebUI security
|
||||||
bool isWebUiClickjackingProtectionEnabled() const;
|
bool isWebUIClickjackingProtectionEnabled() const;
|
||||||
void setWebUiClickjackingProtectionEnabled(bool enabled);
|
void setWebUIClickjackingProtectionEnabled(bool enabled);
|
||||||
bool isWebUiCSRFProtectionEnabled() const;
|
bool isWebUICSRFProtectionEnabled() const;
|
||||||
void setWebUiCSRFProtectionEnabled(bool enabled);
|
void setWebUICSRFProtectionEnabled(bool enabled);
|
||||||
bool isWebUiSecureCookieEnabled () const;
|
bool isWebUISecureCookieEnabled () const;
|
||||||
void setWebUiSecureCookieEnabled(bool enabled);
|
void setWebUISecureCookieEnabled(bool enabled);
|
||||||
bool isWebUIHostHeaderValidationEnabled() const;
|
bool isWebUIHostHeaderValidationEnabled() const;
|
||||||
void setWebUIHostHeaderValidationEnabled(bool enabled);
|
void setWebUIHostHeaderValidationEnabled(bool enabled);
|
||||||
|
|
||||||
// HTTPS
|
// HTTPS
|
||||||
bool isWebUiHttpsEnabled() const;
|
bool isWebUIHttpsEnabled() const;
|
||||||
void setWebUiHttpsEnabled(bool enabled);
|
void setWebUIHttpsEnabled(bool enabled);
|
||||||
Path getWebUIHttpsCertificatePath() const;
|
Path getWebUIHttpsCertificatePath() const;
|
||||||
void setWebUIHttpsCertificatePath(const Path &path);
|
void setWebUIHttpsCertificatePath(const Path &path);
|
||||||
Path getWebUIHttpsKeyPath() const;
|
Path getWebUIHttpsKeyPath() const;
|
||||||
void setWebUIHttpsKeyPath(const Path &path);
|
void setWebUIHttpsKeyPath(const Path &path);
|
||||||
bool isAltWebUiEnabled() const;
|
bool isAltWebUIEnabled() const;
|
||||||
void setAltWebUiEnabled(bool enabled);
|
void setAltWebUIEnabled(bool enabled);
|
||||||
Path getWebUiRootFolder() const;
|
Path getWebUIRootFolder() const;
|
||||||
void setWebUiRootFolder(const Path &path);
|
void setWebUIRootFolder(const Path &path);
|
||||||
|
|
||||||
// WebUI custom HTTP headers
|
// WebUI custom HTTP headers
|
||||||
bool isWebUICustomHTTPHeadersEnabled() const;
|
bool isWebUICustomHTTPHeadersEnabled() const;
|
||||||
@@ -290,17 +290,8 @@ public:
|
|||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
bool neverCheckFileAssoc() const;
|
bool neverCheckFileAssoc() const;
|
||||||
void setNeverCheckFileAssoc(bool check = true);
|
void setNeverCheckFileAssoc(bool check = true);
|
||||||
static bool isTorrentFileAssocSet();
|
|
||||||
static void setTorrentFileAssoc(bool set);
|
|
||||||
static bool isMagnetLinkAssocSet();
|
|
||||||
static void setMagnetLinkAssoc(bool set);
|
|
||||||
#endif
|
|
||||||
#ifdef Q_OS_MACOS
|
|
||||||
static bool isTorrentFileAssocSet();
|
|
||||||
static void setTorrentFileAssoc();
|
|
||||||
static bool isMagnetLinkAssocSet();
|
|
||||||
static void setMagnetLinkAssoc();
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int getTrackerPort() const;
|
int getTrackerPort() const;
|
||||||
void setTrackerPort(int port);
|
void setTrackerPort(int port);
|
||||||
bool isTrackerPortForwardingEnabled() const;
|
bool isTrackerPortForwardingEnabled() const;
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user