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

Compare commits

..

23 Commits

Author SHA1 Message Date
sledgehammer999
97853f31f2 Bump to 4.5.2 2023-02-28 00:40:57 +02:00
sledgehammer999
66ffb7328d Update Changelog 2023-02-28 00:40:15 +02:00
sledgehammer999
9d9101186d Sync translations from Transifex and run lupdate 2023-02-28 00:22:28 +02:00
sledgehammer999
621ec4e92f Migrate transifex tool config to new version 2023-02-28 00:22:28 +02:00
sledgehammer999
4b752cba4f Merge pull request #18627 from glassez/v4.5
Backport changes to v4.5.x branch
2023-02-27 23:08:07 +02:00
Vladimir Golovnev
38c0864bf2 Reject requests that contain backslash in path
PR #18626.
Closes #18618.
2023-02-27 16:52:42 +03:00
Vladimir Golovnev
c21c3d2300 WebAPI: Allow to set read-only directory as torrent location
PR #18613.
Closes #18480.
2023-02-27 10:14:28 +03:00
Vladimir Golovnev
3be5273246 Prevent RSS folder from being moved into itself
PR #18619.
Closes #18446.
2023-02-27 10:14:10 +03:00
Vladimir Golovnev
37e348ed92 Merge pull request #18567 from glassez/v4.5
Backport changes to v4.5.x branch
2023-02-19 20:47:11 +03:00
brvphoenix
36364121ba GHA CI: Add missing dependencies
PR #18596.
2023-02-19 17:04:56 +03:00
Vladimir Golovnev
df08bd331c Prevent precise timers from being used when unnecessary
The implementation of QTimer::singleShot() uses Qt::PreciseTimer if interval is less than 2 seconds. This isn't mentioned in the docs.
Qt::PreciseTimer increases the system's timer resolution which negatively affects power consumption.

PR #18555.
Closes #18350.
2023-02-19 15:06:54 +02:00
sledgehammer999
abd1ab5539 Support TLS 1.2+ only in the server
Closes #18122
2023-02-19 14:58:30 +02:00
sledgehammer999
632d33b266 Blacklist bad ciphers for TLS in the server
Prevents the ROBOT attack.
Closes #18483
2023-02-19 14:58:23 +02:00
Chocobo1
35f7e1c896 GHA CI: compress debug symbols
The result binary is smaller.
2023-02-19 10:56:01 +03:00
Chocobo1
792301dfe4 GHA CI: don't overwrite system default compile flags
System might have some default compile flags which are crucial for security hardening so we
should append our flags instead of overwriting them.
2023-02-19 10:52:08 +03:00
Chocobo1
e31cf5ac23 GHA CI: revert "[CI Ubuntu] Strip installed components"
For tester convenience, the binaries should ship with debug symbols.
This reverts commit b8aa9e5609.
2023-02-19 10:51:44 +03:00
Chocobo1
0bfe6ff64b GHA CI: use least permission level
`actions: write` is required by Chocobo1/setup-ccache-action.
`pull-requests: write` is required by actions/stale.
https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#permissions
2023-02-19 10:51:10 +03:00
Chocobo1
d40c7e8833 GHA CI: speed up package installation on macOS
Setup time is shortened by cutting down unnecessary operations.

https://docs.brew.sh/Manpage#environment
2023-02-19 10:50:39 +03:00
Vladimir Golovnev
8e81d44b3c Update the cached state once recheck is started
We have to force update the cached state, otherwise someone will be able to get an incorrect one during the interval until the cached state is updated in a regular way.

PR #18579.
Closes #18559.
2023-02-17 07:23:20 +03:00
Vladimir Golovnev
97a30218bc Don't increase limits when prefetching metadata for added magnets
Adjusting limits was made based on the belief that "forced" torrents (internally used for prefetching metadata)
are still under limits, but ignore only the queue. This is not really the case. "Forced" torrents ignore the limits
like "maximum active torrents/downloads", so adjusting limits is not required, and what's more, it really causes the
problem of unexpectedly activated previously queued torrents when adding some magnet using "Add new torrent" dialog.

PR #18503.
Fixes #18490.
2023-02-16 11:31:43 +03:00
shitcod3r
e9884b9513 NSIS: Add Uzbek translation
PR #18568.
2023-02-15 12:00:31 +03:00
Chocobo1
a63269e3e1 Migrate away from unsafe function
MooTools More has CVE-2021-20088 and qbt is affected by it by using the
unsafe function call `String.parseQueryString()`, so migrate away from
it.

PR #18554.
2023-02-15 12:00:04 +03:00
Burak Yavuz
d03e715708 NSIS: Update Turkish translation
PR #18552.
2023-02-14 09:18:07 +03:00
141 changed files with 86060 additions and 67244 deletions

View File

@@ -2,6 +2,8 @@ name: CI - File health
on: [pull_request, push]
permissions: {}
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: ${{ github.head_ref != '' }}

View File

@@ -2,6 +2,9 @@ name: CI - macOS
on: [pull_request, push]
permissions:
actions: write
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: ${{ github.head_ref != '' }}
@@ -31,6 +34,9 @@ jobs:
- name: Install dependencies
run: |
export \
HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1 \
HOMEBREW_NO_INSTALL_CLEANUP=1
brew update > /dev/null
brew install \
cmake ninja \
@@ -80,11 +86,12 @@ jobs:
- name: Build qBittorrent (Qt5)
if: ${{ startsWith(matrix.qt_version, 5) }}
run: |
CXXFLAGS="$CXXFLAGS -Werror -Wno-error=deprecated-declarations" \
LDFLAGS="$LDFLAGS -gz" \
cmake \
-B build \
-G "Ninja" \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DCMAKE_CXX_FLAGS="-Werror -Wno-error=deprecated-declarations" \
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
-DBOOST_ROOT="${{ env.boost_path }}" \
-DOPENSSL_ROOT_DIR="${{ env.openssl_root }}" \
@@ -98,11 +105,12 @@ jobs:
- name: Build qBittorrent (Qt6)
if: ${{ startsWith(matrix.qt_version, 6) }}
run: |
CXXFLAGS="$CXXFLAGS -Wno-gnu-zero-variadic-macro-arguments -Werror -Wno-error=deprecated-declarations" \
LDFLAGS="$LDFLAGS -gz" \
cmake \
-B build \
-G "Ninja" \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DCMAKE_CXX_FLAGS="-Wno-gnu-zero-variadic-macro-arguments -Werror -Wno-error=deprecated-declarations" \
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
-DBOOST_ROOT="${{ env.boost_path }}" \
-DOPENSSL_ROOT_DIR="${{ env.openssl_root }}" \

View File

@@ -2,6 +2,9 @@ name: CI - Ubuntu
on: [pull_request, push]
permissions:
actions: write
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: ${{ github.head_ref != '' }}
@@ -30,7 +33,7 @@ jobs:
sudo apt update
sudo apt install \
build-essential cmake ninja-build pkg-config \
libboost-dev libssl-dev zlib1g-dev
libboost-dev libssl-dev libxkbcommon-x11-dev zlib1g-dev
- name: Setup ccache
uses: Chocobo1/setup-ccache-action@v1
@@ -65,11 +68,12 @@ jobs:
- name: Build qBittorrent (Qt5)
if: ${{ startsWith(matrix.qt_version, 5) }}
run: |
CXXFLAGS="$CXXFLAGS -Werror -Wno-error=deprecated-declarations" \
LDFLAGS="$LDFLAGS -gz" \
cmake \
-B build \
-G "Ninja" \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DCMAKE_CXX_FLAGS="-Werror -Wno-error=deprecated-declarations" \
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
-DCMAKE_INSTALL_PREFIX="/usr" \
-DTESTING=ON \
@@ -78,16 +82,17 @@ jobs:
cmake --build build --target qbt_update_translations
cmake --build build
cmake --build build --target check
DESTDIR="qbittorrent" cmake --install build --strip
DESTDIR="qbittorrent" cmake --install build
- name: Build qBittorrent (Qt6)
if: ${{ startsWith(matrix.qt_version, 6) }}
run: |
CXXFLAGS="$CXXFLAGS -Werror" \
LDFLAGS="$LDFLAGS -gz" \
cmake \
-B build \
-G "Ninja" \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DCMAKE_CXX_FLAGS="-Werror" \
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
-DCMAKE_INSTALL_PREFIX="/usr" \
-DQT6=ON \
@@ -97,7 +102,7 @@ jobs:
cmake --build build --target qbt_update_translations
cmake --build build
cmake --build build --target check
DESTDIR="qbittorrent" cmake --install build --strip
DESTDIR="qbittorrent" cmake --install build
- name: Prepare build artifacts
run: |

View File

@@ -2,6 +2,8 @@ name: CI - WebUI
on: [pull_request, push]
permissions: {}
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: ${{ github.head_ref != '' }}

View File

@@ -2,6 +2,9 @@ name: CI - Windows
on: [pull_request, push]
permissions:
actions: write
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: ${{ github.head_ref != '' }}

View File

@@ -5,6 +5,8 @@ on:
- cron: '0 0 1 * *' # Monthly (1st day of month at midnight)
workflow_dispatch: # Mainly for testing. Don't forget the Coverity usage limits.
permissions: {}
jobs:
coverity_scan:
name: Scan

View File

@@ -4,6 +4,9 @@ on:
schedule:
- cron: '0 0 * * *'
permissions:
pull-requests: write
jobs:
stale:
runs-on: ubuntu-latest

View File

@@ -1,27 +1,24 @@
[main]
host = https://www.transifex.com
[qbittorrent.qbittorrent_master]
file_filter = src/lang/qbittorrent_<lang>.ts
lang_map = pt: pt_PT, zh: zh_CN
source_file = src/lang/qbittorrent_en.ts
source_lang = en
type = QT
[o:sledgehammer999:p:qbittorrent:r:qbittorrent_master]
file_filter = src/lang/qbittorrent_<lang>.ts
source_file = src/lang/qbittorrent_en.ts
source_lang = en
type = QT
minimum_perc = 23
mode = developer
lang_map = pt: pt_PT, zh: zh_CN
[qbittorrent.qbittorrentdesktop_master]
source_file = dist/unix/org.qbittorrent.qBittorrent.desktop
source_lang = en
type = DESKTOP
[o:sledgehammer999:p:qbittorrent:r:qbittorrent_webui]
file_filter = src/webui/www/translations/webui_<lang>.ts
source_file = src/webui/www/translations/webui_en.ts
source_lang = en
type = QT
minimum_perc = 23
mode = developer
lang_map = pt: pt_PT, zh: zh_CN
[qbittorrent.qbittorrent_webui]
file_filter = src/webui/www/translations/webui_<lang>.ts
lang_map = pt: pt_PT, zh: zh_CN
source_file = src/webui/www/translations/webui_en.ts
source_lang = en
type = QT
[o:sledgehammer999:p:qbittorrent:r:qbittorrentdesktop_master]
source_file = dist/unix/org.qbittorrent.qBittorrent.desktop
source_lang = en
type = DESKTOP
minimum_perc = 23
mode = developer

View File

@@ -1,3 +1,15 @@
Tue Feb 28 2023 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.5.2
- BUGFIX: Don't unexpectedly activate queued torrents when prefetching metadata for added magnets (glassez)
- BUGFIX: Update the cached torrent state once recheck is started (glassez)
- BUGFIX: Be more likely to allow the system to use power saving modes (glassez)
- WEBUI: Migrate away from unsafe function (Chocobo1)
- WEBUI: Blacklist bad ciphers for TLS in the server (sledgehammer999)
- WEBUI: Allow only TLS 1.2+ in the server (sledgehammer999)
- WEBUI: Allow to set read-only directory as torrent location (glassez)
- WEBUI: Reject requests that contain backslash in path (glassez)
- RSS: Prevent RSS folder from being moved into itself (glassez)
- WINDOWS: NSIS: Update Turkish, Uzbek translation (Burak Yavuz, shitcod3r)
Sun Feb 12 2023 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.5.1
- FEATURE: Re-allow to use icons from system theme (glassez)
- BUGFIX: Fix Speed limit icon size (Nowshed H. Imran)

20
configure vendored
View File

@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.71 for qbittorrent v4.5.1.
# Generated by GNU Autoconf 2.71 for qbittorrent v4.5.2.
#
# Report bugs to <bugs.qbittorrent.org>.
#
@@ -611,8 +611,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='qbittorrent'
PACKAGE_TARNAME='qbittorrent'
PACKAGE_VERSION='v4.5.1'
PACKAGE_STRING='qbittorrent v4.5.1'
PACKAGE_VERSION='v4.5.2'
PACKAGE_STRING='qbittorrent v4.5.2'
PACKAGE_BUGREPORT='bugs.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.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
\`configure' configures qbittorrent v4.5.1 to adapt to many kinds of systems.
\`configure' configures qbittorrent v4.5.2 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1400,7 +1400,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
short | recursive ) echo "Configuration of qbittorrent v4.5.1:";;
short | recursive ) echo "Configuration of qbittorrent v4.5.2:";;
esac
cat <<\_ACEOF
@@ -1533,7 +1533,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
qbittorrent configure v4.5.1
qbittorrent configure v4.5.2
generated by GNU Autoconf 2.71
Copyright (C) 2021 Free Software Foundation, Inc.
@@ -1648,7 +1648,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
It was created by qbittorrent $as_me v4.5.1, which was
It was created by qbittorrent $as_me v4.5.2, which was
generated by GNU Autoconf 2.71. Invocation command line was
$ $0$ac_configure_args_raw
@@ -4779,7 +4779,7 @@ fi
# Define the identity of the package.
PACKAGE='qbittorrent'
VERSION='v4.5.1'
VERSION='v4.5.2'
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
# values after options handling.
ac_log="
This file was extended by qbittorrent $as_me v4.5.1, which was
This file was extended by qbittorrent $as_me v4.5.2, which was
generated by GNU Autoconf 2.71. Invocation command line was
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
ac_cs_config='$ac_cs_config_escaped'
ac_cs_version="\\
qbittorrent config.status v4.5.1
qbittorrent config.status v4.5.2
configured by $0, generated by GNU Autoconf 2.71,
with options \\"\$ac_cs_config\\"

View File

@@ -1,4 +1,4 @@
AC_INIT([qbittorrent], [v4.5.1], [bugs.qbittorrent.org], [], [https://www.qbittorrent.org/])
AC_INIT([qbittorrent], [v4.5.2], [bugs.qbittorrent.org], [], [https://www.qbittorrent.org/])
AC_CONFIG_AUX_DIR([build-aux])
AC_CONFIG_MACRO_DIR([m4])
: ${CFLAGS=""}

2
dist/mac/Info.plist vendored
View File

@@ -55,7 +55,7 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>4.5.1</string>
<string>4.5.2</string>
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleIdentifier</key>

View File

@@ -74,6 +74,6 @@
<url type="translate">https://github.com/qbittorrent/qBittorrent/wiki/How-to-translate-qBittorrent</url>
<content_rating type="oars-1.1"/>
<releases>
<release version="4.5.1" date="2023-02-12"/>
<release version="4.5.2" date="2023-02-28"/>
</releases>
</component>

View File

@@ -25,7 +25,7 @@
; 4.5.1.3 -> good
; 4.5.1.3.2 -> bad
; 4.5.0beta -> bad
!define /ifndef QBT_VERSION "4.5.1"
!define /ifndef QBT_VERSION "4.5.2"
; Option that controls the installer's window name
; If set, its value will be used like this:

View File

@@ -31,7 +31,7 @@ LangString inst_requires_64bit ${LANG_TURKISH} "Bu yükleyici sadece 64-bit Wind
;LangString inst_requires_win7 ${LANG_ENGLISH} "This qBittorrent version requires at least Windows 7."
LangString inst_requires_win7 ${LANG_TURKISH} "Bu qBittorrent sürümü en az Windows 7 gerektirir."
;LangString inst_requires_win10 ${LANG_ENGLISH} "This installer requires at least Windows 10 1809."
LangString inst_requires_win10 ${LANG_TURKISH} "This installer requires at least Windows 10 1809."
LangString inst_requires_win10 ${LANG_TURKISH} "Bu yükleyici en az Windows 10 1809 gerektirir."
;LangString inst_uninstall_link_description ${LANG_ENGLISH} "Uninstall qBittorrent"
LangString inst_uninstall_link_description ${LANG_TURKISH} "qBittorrent'i kaldır"

View File

@@ -1,62 +1,62 @@
;Installer strings
;LangString inst_qbt_req ${LANG_ENGLISH} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_UZBEK} "qBittorrent (required)"
LangString inst_qbt_req ${LANG_UZBEK} "qBittorrent (talab qilinadi)"
;LangString inst_dekstop ${LANG_ENGLISH} "Create Desktop Shortcut"
LangString inst_dekstop ${LANG_UZBEK} "Create Desktop Shortcut"
LangString inst_dekstop ${LANG_UZBEK} "Ish Stolida Yorliq Yaratilsin"
;LangString inst_startmenu ${LANG_ENGLISH} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_UZBEK} "Create Start Menu Shortcut"
LangString inst_startmenu ${LANG_UZBEK} "Boshlash Menyusida Yorliq Yaratilsin"
;LangString inst_startup ${LANG_ENGLISH} "Start qBittorrent on Windows start up"
LangString inst_startup ${LANG_UZBEK} "Start qBittorrent on Windows start up"
LangString inst_startup ${LANG_UZBEK} "qBittorrent Windows bilan birga ishga tushirilsin"
;LangString inst_torrent ${LANG_ENGLISH} "Open .torrent files with qBittorrent"
LangString inst_torrent ${LANG_UZBEK} "Open .torrent files with qBittorrent"
LangString inst_torrent ${LANG_UZBEK} ".torrent fayllar qBittorrent bilan ochilsin"
;LangString inst_magnet ${LANG_ENGLISH} "Open magnet links with qBittorrent"
LangString inst_magnet ${LANG_UZBEK} "Open magnet links with qBittorrent"
LangString inst_magnet ${LANG_UZBEK} "Magnit havolalar qBittorrent bilan ochilsin"
;LangString inst_firewall ${LANG_ENGLISH} "Add Windows Firewall rule"
LangString inst_firewall ${LANG_UZBEK} "Add Windows Firewall rule"
LangString inst_firewall ${LANG_UZBEK} "Windows Xavfsizlik Devori qoidasi qoʻshilsin"
;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_UZBEK} "Disable Windows path length limit (260 character MAX_PATH limitation, requires Windows 10 1607 or later)"
LangString inst_pathlimit ${LANG_UZBEK} "Windows yoʻl uzunligi cheklovi olib tashlansin (260 belgi MAX_PATH cheklovi, Windows 10 1607 va yuqorisi talab qilinadi)"
;LangString inst_firewallinfo ${LANG_ENGLISH} "Adding Windows Firewall rule"
LangString inst_firewallinfo ${LANG_UZBEK} "Adding Windows Firewall rule"
LangString inst_firewallinfo ${LANG_UZBEK} "Windows Xavfsizlik Devori qoidasini qoʻshish"
;LangString inst_warning ${LANG_ENGLISH} "qBittorrent is running. Please close the application before installing."
LangString inst_warning ${LANG_UZBEK} "qBittorrent is running. Please close the application before installing."
LangString inst_warning ${LANG_UZBEK} "qBittorrent ishga tushgan. Iltimos, oʻrnatishdan oldin dasturni yoping."
;LangString inst_uninstall_question ${LANG_ENGLISH} "Current version will be uninstalled. User settings and torrents will remain intact."
LangString inst_uninstall_question ${LANG_UZBEK} "Current version will be uninstalled. User settings and torrents will remain intact."
LangString inst_uninstall_question ${LANG_UZBEK} "Hozirgi versiya oʻchiriladi. Foydalanuvchi sozlamalari va torrentlar oʻzgarishsiz qoladi."
;LangString inst_unist ${LANG_ENGLISH} "Uninstalling previous version."
LangString inst_unist ${LANG_UZBEK} "Uninstalling previous version."
LangString inst_unist ${LANG_UZBEK} "Oldingi versiyani oʻchirish."
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
LangString launch_qbt ${LANG_UZBEK} "Launch qBittorrent."
LangString launch_qbt ${LANG_UZBEK} "qBittorrent ishga tushirilsin."
;LangString inst_requires_64bit ${LANG_ENGLISH} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_UZBEK} "This installer works only in 64-bit Windows versions."
LangString inst_requires_64bit ${LANG_UZBEK} "Bu oʻrnatuvchi faqat Windows 64-bit versiyalarda ishlaydi."
;LangString inst_requires_win7 ${LANG_ENGLISH} "This qBittorrent version requires at least Windows 7."
LangString inst_requires_win7 ${LANG_UZBEK} "This qBittorrent version requires at least Windows 7."
LangString inst_requires_win7 ${LANG_UZBEK} "qBittorrent bu versiyasi kamida Windows 7 talab qiladi."
;LangString inst_requires_win10 ${LANG_ENGLISH} "This installer requires at least Windows 10 1809."
LangString inst_requires_win10 ${LANG_UZBEK} "This installer requires at least Windows 10 1809."
LangString inst_requires_win10 ${LANG_UZBEK} "Bu oʻrnatuvchi kamida Windows 10 1809 talab qiladi."
;LangString inst_uninstall_link_description ${LANG_ENGLISH} "Uninstall qBittorrent"
LangString inst_uninstall_link_description ${LANG_UZBEK} "Uninstall qBittorrent"
LangString inst_uninstall_link_description ${LANG_UZBEK} "qBittorrent oʻchirilsin"
;------------------------------------
;Uninstaller strings
;LangString remove_files ${LANG_ENGLISH} "Remove files"
LangString remove_files ${LANG_UZBEK} "Remove files"
LangString remove_files ${LANG_UZBEK} "Fayllar oʻchirilsin"
;LangString remove_shortcuts ${LANG_ENGLISH} "Remove shortcuts"
LangString remove_shortcuts ${LANG_UZBEK} "Remove shortcuts"
LangString remove_shortcuts ${LANG_UZBEK} "Yorliqlar oʻchirilsin"
;LangString remove_associations ${LANG_ENGLISH} "Remove file associations"
LangString remove_associations ${LANG_UZBEK} "Remove file associations"
LangString remove_associations ${LANG_UZBEK} "Fayl birlashmalari oʻchirilsin"
;LangString remove_registry ${LANG_ENGLISH} "Remove registry keys"
LangString remove_registry ${LANG_UZBEK} "Remove registry keys"
LangString remove_registry ${LANG_UZBEK} "Reyester kalitlari oʻchirilsin"
;LangString remove_conf ${LANG_ENGLISH} "Remove configuration files"
LangString remove_conf ${LANG_UZBEK} "Remove configuration files"
LangString remove_conf ${LANG_UZBEK} "Sozlama fayllari oʻchirilsin"
;LangString remove_firewall ${LANG_ENGLISH} "Remove Windows Firewall rule"
LangString remove_firewall ${LANG_UZBEK} "Remove Windows Firewall rule"
LangString remove_firewall ${LANG_UZBEK} "Windows Xavfsizlik Devori qoidasi oʻchirilsin"
;LangString remove_firewallinfo ${LANG_ENGLISH} "Removing Windows Firewall rule"
LangString remove_firewallinfo ${LANG_UZBEK} "Removing Windows Firewall rule"
LangString remove_firewallinfo ${LANG_UZBEK} "Windows Xavfsizlik Devori qoidasini oʻchirish"
;LangString remove_cache ${LANG_ENGLISH} "Remove torrents and cached data"
LangString remove_cache ${LANG_UZBEK} "Remove torrents and cached data"
LangString remove_cache ${LANG_UZBEK} "Torrentlar va keshlangan maʼlumotlar oʻchirilsin"
;LangString uninst_warning ${LANG_ENGLISH} "qBittorrent is running. Please close the application before uninstalling."
LangString uninst_warning ${LANG_UZBEK} "qBittorrent is running. Please close the application before uninstalling."
LangString uninst_warning ${LANG_UZBEK} "qBittorrent ishga tushgan. Iltimos, oʻchirishdan oldin dasturni yoping."
;LangString uninst_tor_warn ${LANG_ENGLISH} "Not removing .torrent association. It is associated with:"
LangString uninst_tor_warn ${LANG_UZBEK} "Not removing .torrent association. It is associated with:"
LangString uninst_tor_warn ${LANG_UZBEK} ".torrent birlashmasi oʻchirilmadi. U quyidagi bilan birlashgan:"
;LangString uninst_mag_warn ${LANG_ENGLISH} "Not removing magnet association. It is associated with:"
LangString uninst_mag_warn ${LANG_UZBEK} "Not removing magnet association. It is associated with:"
LangString uninst_mag_warn ${LANG_UZBEK} "Magnit birlashmasi oʻchirilmadi. U quyidagi bilan birlashgan:"

View File

@@ -283,7 +283,7 @@ void showSplashScreen()
painter.drawText(224 - painter.fontMetrics().horizontalAdvance(version), 270, version);
QSplashScreen *splash = new QSplashScreen(splashImg);
splash->show();
QTimer::singleShot(1500ms, splash, &QObject::deleteLater);
QTimer::singleShot(1500ms, Qt::CoarseTimer, splash, &QObject::deleteLater);
qApp->processEvents();
}
#endif // DISABLE_GUI

View File

@@ -1050,18 +1050,6 @@ void SessionImpl::setGlobalMaxSeedingMinutes(int minutes)
}
}
void SessionImpl::adjustLimits()
{
if (isQueueingSystemEnabled())
{
lt::settings_pack settingsPack;
// Internally increase the queue limits to ensure that the magnet is started
settingsPack.set_int(lt::settings_pack::active_downloads, adjustLimit(maxActiveDownloads()));
settingsPack.set_int(lt::settings_pack::active_limit, adjustLimit(maxActiveTorrents()));
m_nativeSession->apply_settings(std::move(settingsPack));
}
}
void SessionImpl::applyBandwidthLimits()
{
lt::settings_pack settingsPack;
@@ -1502,16 +1490,6 @@ void SessionImpl::processBannedIPs(lt::ip_filter &filter)
}
}
int SessionImpl::adjustLimit(const int limit) const
{
if (limit <= -1)
return limit;
// check for overflow: (limit + m_extraLimit) < std::numeric_limits<int>::max()
return (m_extraLimit < (std::numeric_limits<int>::max() - limit))
? (limit + m_extraLimit)
: std::numeric_limits<int>::max();
}
void SessionImpl::initMetrics()
{
const auto findMetricIndex = [](const char *name) -> int
@@ -1713,10 +1691,8 @@ lt::settings_pack SessionImpl::loadLTSettings() const
// Queueing System
if (isQueueingSystemEnabled())
{
// Internally increase the queue limits to ensure that the magnet is started
settingsPack.set_int(lt::settings_pack::active_downloads, adjustLimit(maxActiveDownloads()));
settingsPack.set_int(lt::settings_pack::active_limit, adjustLimit(maxActiveTorrents()));
settingsPack.set_int(lt::settings_pack::active_downloads, maxActiveDownloads());
settingsPack.set_int(lt::settings_pack::active_limit, maxActiveTorrents());
settingsPack.set_int(lt::settings_pack::active_seeds, maxActiveUploads());
settingsPack.set_bool(lt::settings_pack::dont_count_slow_torrents, ignoreSlowTorrentsForQueueing());
settingsPack.set_int(lt::settings_pack::inactive_down_rate, downloadRateForSlowTorrents() * 1024); // KiB to Bytes
@@ -2290,8 +2266,6 @@ bool SessionImpl::cancelDownloadMetadata(const TorrentID &id)
}
#endif
m_downloadedMetadata.erase(downloadedMetadataIter);
--m_extraLimit;
adjustLimits();
m_nativeSession->remove_torrent(nativeHandle, lt::session::delete_files);
return true;
}
@@ -2839,8 +2813,6 @@ bool SessionImpl::downloadMetadata(const MagnetUri &magnetUri)
const auto altID = TorrentID::fromSHA1Hash(infoHash.v1());
m_downloadedMetadata.insert(altID);
}
++m_extraLimit;
adjustLimits();
return true;
}
@@ -4957,7 +4929,7 @@ void SessionImpl::enqueueRefresh()
{
Q_ASSERT(!m_refreshEnqueued);
QTimer::singleShot(refreshInterval(), this, [this] ()
QTimer::singleShot(refreshInterval(), Qt::CoarseTimer, this, [this]
{
m_nativeSession->post_torrent_updates();
m_nativeSession->post_session_stats();
@@ -5331,9 +5303,6 @@ void SessionImpl::handleMetadataReceivedAlert(const lt::metadata_received_alert
if (found)
{
const TorrentInfo metadata {*p->handle.torrent_file()};
--m_extraLimit;
adjustLimits();
m_nativeSession->remove_torrent(p->handle, lt::session::delete_files);
emit metadataDownloaded(metadata);

View File

@@ -475,9 +475,7 @@ namespace BitTorrent
lt::settings_pack loadLTSettings() const;
void applyNetworkInterfacesSettings(lt::settings_pack &settingsPack) const;
void configurePeerClasses();
int adjustLimit(int limit) const;
void initMetrics();
void adjustLimits();
void applyBandwidthLimits();
void processBannedIPs(lt::ip_filter &filter);
QStringList getListeningIPs() const;
@@ -668,7 +666,6 @@ namespace BitTorrent
const bool m_wasPexEnabled = m_isPeXEnabled;
int m_numResumeData = 0;
int m_extraLimit = 0;
QVector<TrackerEntry> m_additionalTrackerList;
QVector<QRegularExpression> m_excludedFileNamesRegExpList;

View File

@@ -1441,6 +1441,10 @@ void TorrentImpl::forceRecheck()
if (!hasMetadata()) return;
m_nativeHandle.force_recheck();
// We have to force update the cached state, otherwise someone will be able to get
// an incorrect one during the interval until the cached state is updated in a regular way.
m_nativeStatus.state = lt::torrent_status::checking_resume_data;
m_hasMissingFiles = false;
m_unchecked = false;
m_completedFiles.fill(false);

View File

@@ -56,10 +56,33 @@ namespace
QList<QSslCipher> safeCipherList()
{
const QStringList badCiphers {u"idea"_qs, u"rc4"_qs};
// Contains Ciphersuites that use RSA for the Key Exchange but they don't mention it in their name
const QStringList badRSAShorthandSuites {
u"AES256-GCM-SHA384"_qs, u"AES128-GCM-SHA256"_qs, u"AES256-SHA256"_qs,
u"AES128-SHA256"_qs, u"AES256-SHA"_qs, u"AES128-SHA"_qs};
// Contains Ciphersuites that use AES CBC mode but they don't mention it in their name
const QStringList badAESShorthandSuites {
u"ECDHE-ECDSA-AES256-SHA384"_qs, u"ECDHE-RSA-AES256-SHA384"_qs, u"DHE-RSA-AES256-SHA256"_qs,
u"ECDHE-ECDSA-AES128-SHA256"_qs, u"ECDHE-RSA-AES128-SHA256"_qs, u"DHE-RSA-AES128-SHA256"_qs,
u"ECDHE-ECDSA-AES256-SHA"_qs, u"ECDHE-RSA-AES256-SHA"_qs, u"DHE-RSA-AES256-SHA"_qs,
u"ECDHE-ECDSA-AES128-SHA"_qs, u"ECDHE-RSA-AES128-SHA"_qs, u"DHE-RSA-AES128-SHA"_qs};
const QList<QSslCipher> allCiphers {QSslConfiguration::supportedCiphers()};
QList<QSslCipher> safeCiphers;
std::copy_if(allCiphers.cbegin(), allCiphers.cend(), std::back_inserter(safeCiphers), [&badCiphers](const QSslCipher &cipher)
std::copy_if(allCiphers.cbegin(), allCiphers.cend(), std::back_inserter(safeCiphers),
[&badCiphers, &badRSAShorthandSuites, &badAESShorthandSuites](const QSslCipher &cipher)
{
const QString name = cipher.name();
if (name.contains(u"-cbc-"_qs, Qt::CaseInsensitive) // AES CBC mode is considered vulnerable to BEAST attack
|| name.startsWith(u"adh-"_qs, Qt::CaseInsensitive) // Key Exchange: Diffie-Hellman, doesn't support Perfect Forward Secrecy
|| name.startsWith(u"aecdh-"_qs, Qt::CaseInsensitive) // Key Exchange: Elliptic Curve Diffie-Hellman, doesn't support Perfect Forward Secrecy
|| name.startsWith(u"psk-"_qs, Qt::CaseInsensitive) // Key Exchange: Pre-Shared Key, doesn't support Perfect Forward Secrecy
|| name.startsWith(u"rsa-"_qs, Qt::CaseInsensitive) // Key Exchange: Rivest Shamir Adleman (RSA), doesn't support Perfect Forward Secrecy
|| badRSAShorthandSuites.contains(name, Qt::CaseInsensitive)
|| badAESShorthandSuites.contains(name, Qt::CaseInsensitive))
{
return false;
}
return std::none_of(badCiphers.cbegin(), badCiphers.cend(), [&cipher](const QString &badCipher)
{
return cipher.name().contains(badCipher, Qt::CaseInsensitive);
@@ -78,6 +101,7 @@ Server::Server(IRequestHandler *requestHandler, QObject *parent)
setProxy(QNetworkProxy::NoProxy);
QSslConfiguration sslConf {QSslConfiguration::defaultConfiguration()};
sslConf.setProtocol(QSsl::TlsV1_2OrLater);
sslConf.setCiphers(safeCipherList());
QSslConfiguration::setDefaultConfiguration(sslConf);

View File

@@ -185,8 +185,11 @@ nonstd::expected<void, QString> Session::moveItem(Item *item, const QString &des
if (!result)
return result.get_unexpected();
auto srcFolder = static_cast<Folder *>(m_itemsByPath.value(Item::parentPath(item->path())));
const auto destFolder = result.value();
if (static_cast<Item *>(destFolder) == item)
return nonstd::make_unexpected(tr("Couldn't move folder into itself."));
auto srcFolder = static_cast<Folder *>(m_itemsByPath.value(Item::parentPath(item->path())));
if (srcFolder != destFolder)
{
srcFolder->removeItem(item);

View File

@@ -503,7 +503,7 @@ void TorrentFilesWatcher::Worker::removeWatchedFolder(const Path &path)
void TorrentFilesWatcher::Worker::scheduleWatchedFolderProcessing(const Path &path)
{
QTimer::singleShot(2s, this, [this, path]()
QTimer::singleShot(2s, Qt::CoarseTimer, this, [this, path]
{
processWatchedFolder(path);
});

View File

@@ -30,7 +30,7 @@
#define QBT_VERSION_MAJOR 4
#define QBT_VERSION_MINOR 5
#define QBT_VERSION_BUGFIX 1
#define QBT_VERSION_BUGFIX 2
#define QBT_VERSION_BUILD 0
#define QBT_VERSION_STATUS "" // Should be empty for stable releases!

View File

@@ -105,7 +105,8 @@ FeedListWidget::FeedListWidget(QWidget *parent)
m_rssToTreeItemMapping[RSS::Session::instance()->rootFolder()] = invisibleRootItem();
m_unreadStickyItem = new FeedListItem(this);
m_unreadStickyItem->setData(0, Qt::UserRole, QVariant::fromValue(RSS::Session::instance()->rootFolder()));
m_unreadStickyItem->setData(0, Qt::UserRole, QVariant::fromValue(
reinterpret_cast<intptr_t>(RSS::Session::instance()->rootFolder())));
m_unreadStickyItem->setText(0, tr("Unread (%1)").arg(RSS::Session::instance()->rootFolder()->unreadCount()));
m_unreadStickyItem->setData(0, Qt::DecorationRole, UIThemeManager::instance()->getIcon(u"mail-inbox"_qs));
m_unreadStickyItem->setData(0, StickyItemTagRole, true);
@@ -211,9 +212,10 @@ QList<QTreeWidgetItem *> FeedListWidget::getAllOpenedFolders(QTreeWidgetItem *pa
RSS::Item *FeedListWidget::getRSSItem(QTreeWidgetItem *item) const
{
if (!item) return nullptr;
if (!item)
return nullptr;
return item->data(0, Qt::UserRole).value<RSS::Item *>();
return reinterpret_cast<RSS::Item *>(item->data(0, Qt::UserRole).value<intptr_t>());
}
QTreeWidgetItem *FeedListWidget::mapRSSItem(RSS::Item *rssItem) const
@@ -275,7 +277,7 @@ QTreeWidgetItem *FeedListWidget::createItem(RSS::Item *rssItem, QTreeWidgetItem
{
auto *item = new FeedListItem;
item->setData(0, Qt::DisplayRole, u"%1 (%2)"_qs.arg(rssItem->name(), QString::number(rssItem->unreadCount())));
item->setData(0, Qt::UserRole, QVariant::fromValue(rssItem));
item->setData(0, Qt::UserRole, QVariant::fromValue(reinterpret_cast<intptr_t>(rssItem)));
m_rssToTreeItemMapping[rssItem] = item;
QIcon icon;

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="az@latin">
<?xml version="1.0" ?><!DOCTYPE TS><TS version="2.1" language="az@latin">
<context>
<name>AboutDialog</name>
<message>
@@ -386,8 +384,8 @@
<location filename="../gui/addnewtorrentdialog.cpp" line="435"/>
<source>Failed to load the torrent: %1.
Error: %2</source>
<comment>Don&apos;t remove the &apos;
&apos; characters. They insert a newline.</comment>
<comment>Don't remove the '
' characters. They insert a newline.</comment>
<translation>Torrent&apos;i yükləmə uğursuz: %1.
Xəta: %2</translation>
</message>
@@ -1205,9 +1203,9 @@ Xəta: %2</translation>
</message>
<message>
<location filename="../app/application.cpp" line="791"/>
<source>An I/O error occurred for torrent &apos;%1&apos;.
<source>An I/O error occurred for torrent '%1'.
Reason: %2</source>
<comment>e.g: An error occurred for torrent &apos;xxx.avi&apos;.
<comment>e.g: An error occurred for torrent 'xxx.avi'.
Reason: disk is full.</comment>
<translation>&quot;%1&quot; torrenti üçün Giriş/Çıxış xətası baş verdi
Səbəb: %2</translation>
@@ -1403,7 +1401,7 @@ qBittorrenti bunlar üçün əsas tətbiq etmək istəyirsiniz?</translation>
<message>
<location filename="../gui/rss/automatedrssdownloader.ui" line="69"/>
<source>Rename selected rule. You can also use the F2 hotkey to rename.</source>
<translation type="unfinished"></translation>
<translation>Seçilmiş qaydanın adını dəyişin. Həmçinin F2 düyməsi ilə adı dəyişə bilərsiniz.</translation>
</message>
<message>
<location filename="../gui/rss/automatedrssdownloader.ui" line="137"/>
@@ -1891,17 +1889,17 @@ Bu formatlar dəstəklənir: S01E01, 1x1, 2017.12.31 və 31.12.2017 (Həmçinin
<message>
<location filename="../base/bittorrent/dbresumedatastorage.cpp" line="458"/>
<source>Couldn&apos;t enable Write-Ahead Logging (WAL) journaling mode. Error: %1.</source>
<translation type="unfinished"></translation>
<translation>Öncədən Yazma Gündəliyi (ing. - WAL) jurnallama rejimi. Xəta: %1</translation>
</message>
<message>
<location filename="../base/bittorrent/dbresumedatastorage.cpp" line="585"/>
<source>Couldn&apos;t obtain query result.</source>
<translation type="unfinished"></translation>
<translation>Sorğu nəticələrini əldə etmək mümkün olmadı.</translation>
</message>
<message>
<location filename="../base/bittorrent/dbresumedatastorage.cpp" line="589"/>
<source>WAL mode is probably unsupported due to filesystem limitations.</source>
<translation type="unfinished"></translation>
<translation>Öncədən Yazma Gündəliyi rejimi, ehtimal ki, fayl sistemindəki məhdudiyyət səbəbindən dəstəklənmir.</translation>
</message>
<message>
<location filename="../base/bittorrent/dbresumedatastorage.cpp" line="676"/>
@@ -2597,7 +2595,7 @@ Bu formatlar dəstəklənir: S01E01, 1x1, 2017.12.31 və 31.12.2017 (Həmçinin
<message>
<location filename="../gui/deletionconfirmationdialog.cpp" line="45"/>
<source>Are you sure you want to remove &apos;%1&apos; from the transfer list?</source>
<comment>Are you sure you want to remove &apos;ubuntu-linux-iso&apos; from the transfer list?</comment>
<comment>Are you sure you want to remove 'ubuntu-linux-iso' from the transfer list?</comment>
<translation>&quot;%1&quot; faylını köçürmə sayahısından silmək istədiyinizə əminsiz?</translation>
</message>
<message>
@@ -5180,10 +5178,6 @@ Lütfən, əl ilə qyraşdırın.</translation>
<source>Show splash screen on start up</source>
<translation>Başlanğıcda qarşılama ekranını göstərmək</translation>
</message>
<message>
<source>Start qBittorrent minimized</source>
<translation type="vanished">qBittorent&apos;i treyə yığılmış halda başlatmaq</translation>
</message>
<message>
<location filename="../gui/optionsdialog.ui" line="443"/>
<source>Confirmation on exit when torrents are active</source>
@@ -5713,10 +5707,6 @@ serveri tərəfindən istifadə olunan domen adını göstərməlisiniz.
<source>Show torrent options</source>
<translation>Torrent parametrlərini göstərmək</translation>
</message>
<message>
<source>When qBittorrent is started, the main window will be minimized</source>
<translation type="vanished">qBittorrent başladıldıqda, əsas pəncrə treyə yığılacaq</translation>
</message>
<message>
<location filename="../gui/optionsdialog.ui" line="440"/>
<source>Shows a confirmation dialog when exiting with active torrents</source>
@@ -5852,17 +5842,17 @@ Manual: Various torrent properties (e.g. save path) must be assigned manually</s
<message>
<location filename="../gui/optionsdialog.ui" line="209"/>
<source>Use icons from system theme</source>
<translation type="unfinished"></translation>
<translation>Sistem mövzusundakı nişandan istifadə etmək.</translation>
</message>
<message>
<location filename="../gui/optionsdialog.ui" line="411"/>
<source>Window state on start up:</source>
<translation type="unfinished"></translation>
<translation>Sistem açıldıqda pəncərnin vəziyyəti:</translation>
</message>
<message>
<location filename="../gui/optionsdialog.ui" line="418"/>
<source>qBittorrent window state on start up</source>
<translation type="unfinished"></translation>
<translation>Sistemin açılışında qBittorrent pəncərəsinin vəziyyəti</translation>
</message>
<message>
<location filename="../gui/optionsdialog.ui" line="875"/>
@@ -5913,9 +5903,9 @@ Use newlines to separate multiple entries. Can use wildcards as outlined below.
[...]: sets of characters can be represented in square brackets.
Examples
*.exe: filter &apos;.exe&apos; file extension.
*.exe: filter '.exe' file extension.
readme.txt: filter exact file name.
?.txt: filter &apos;a.txt&apos;, &apos;b.txt&apos; but not &apos;aa.txt&apos;.
?.txt: filter 'a.txt', 'b.txt' but not 'aa.txt'.
readme[0-9].txt: filter &apos;readme1.txt&apos;, &apos;readme2.txt&apos; but not &apos;readme10.txt&apos;.</source>
<translation>Qara siyahı, endiriləcək torrent(lər)in siyahısından fayl adlarını çıxarır.
Bu ada uyğun fayllara avtomatik &quot;Endirilməsin&quot; parametri təyin olunacaq.
@@ -6476,12 +6466,12 @@ readme[0-9].txt: &quot;readme1ştxt&quot;, &quot;readme2ştxt&quot;-ni seçir, l
<message>
<location filename="../gui/optionsdialog.cpp" line="256"/>
<source>Minimized</source>
<translation type="unfinished"></translation>
<translation>Yığılmış</translation>
</message>
<message>
<location filename="../gui/optionsdialog.cpp" line="258"/>
<source>Hidden</source>
<translation type="unfinished"></translation>
<translation>Gizli</translation>
</message>
<message>
<location filename="../gui/optionsdialog.cpp" line="273"/>
@@ -6859,7 +6849,7 @@ readme[0-9].txt: &quot;readme1ştxt&quot;, &quot;readme2ştxt&quot;-ni seçir, l
<message>
<location filename="../gui/properties/peerlistwidget.cpp" line="119"/>
<source>Relevance</source>
<comment>i.e: How relevant this peer is to us. How many pieces it has that we don&apos;t.</comment>
<comment>i.e: How relevant this peer is to us. How many pieces it has that we don't.</comment>
<translation>Uyğunluq</translation>
</message>
<message>
@@ -7736,13 +7726,13 @@ Bu qoşmalar söndürülüb.</translation>
<message>
<location filename="../app/cmdoptions.cpp" line="155"/>
<source>Parameter &apos;%1&apos; must follow syntax &apos;%1=%2&apos;</source>
<comment>e.g. Parameter &apos;--webui-port&apos; must follow syntax &apos;--webui-port=value&apos;</comment>
<comment>e.g. Parameter '--webui-port' must follow syntax '--webui-port=value'</comment>
<translation>&quot;%1&quot; parametri &apos;%1=%2&apos; sintaksisin ilə uzlaşmalıdır</translation>
</message>
<message>
<location filename="../app/cmdoptions.cpp" line="205"/>
<source>Parameter &apos;%1&apos; must follow syntax &apos;%1=%2&apos;</source>
<comment>e.g. Parameter &apos;--webui-port&apos; must follow syntax &apos;--webui-port=&lt;value&gt;&apos;</comment>
<comment>e.g. Parameter '--webui-port' must follow syntax '--webui-port=&lt;value&gt;'</comment>
<translation>&quot;%1&quot; parametri &apos;%1=%2&apos; sintaksisi ilə uzlaşmalıdır</translation>
</message>
<message>
@@ -7753,7 +7743,7 @@ Bu qoşmalar söndürülüb.</translation>
<message>
<location filename="../app/cmdoptions.cpp" line="276"/>
<source>Parameter &apos;%1&apos; must follow syntax &apos;%1=%2&apos;</source>
<comment>e.g. Parameter &apos;--add-paused&apos; must follow syntax &apos;--add-paused=&lt;true|false&gt;&apos;</comment>
<comment>e.g. Parameter '--add-paused' must follow syntax '--add-paused=&lt;true|false&gt;'</comment>
<translation>&quot;%1&quot; parametri &apos;%1=%2&apos; sintaksisi ilə uzlaşmalıdır</translation>
</message>
<message>
@@ -8679,7 +8669,7 @@ No further notices will be issued.</source>
</message>
<message>
<location filename="../gui/search/searchwidget.ui" line="79"/>
<source>There aren&apos;t any search plugins installed.
<source>There aren't any search plugins installed.
Click the &quot;Search plugins...&quot; button at the bottom right of the window to install some.</source>
<translation>Quraşdırılmış axtarış qoşması yoxdur.
Onlardan bəzilərini quraşdırmaq üçün pəncərənin aşağı-sağındakı &quot;Axtarış qoşmaları...&quot; düyməsinə vurun.</translation>
@@ -9531,8 +9521,8 @@ Onlardan bəzilərini quraşdırmaq üçün pəncərənin aşağı-sağındakı
</message>
<message>
<location filename="../gui/torrentcategorydialog.cpp" line="84"/>
<source>Category name cannot contain &apos;\&apos;.
Category name cannot start/end with &apos;/&apos;.
<source>Category name cannot contain '\'.
Category name cannot start/end with '/'.
Category name cannot contain &apos;//&apos; sequence.</source>
<translation>Kateqoriya adında &apos;\&apos; ola bilməz
Kateqoriya adı &apos;/&apos; ilə başlaya və bitə bilməz
@@ -10570,13 +10560,13 @@ Başqa ad verin və yenidən cəhd edin.</translation>
<message>
<location filename="../gui/transferlistmodel.cpp" line="144"/>
<source>[F] Downloading metadata</source>
<comment>Used when forced to load a magnet link. You probably shouldn&apos;t translate the F.</comment>
<comment>Used when forced to load a magnet link. You probably shouldn't translate the F.</comment>
<translation>[F] Meta verilənləri endirilir</translation>
</message>
<message>
<location filename="../gui/transferlistmodel.cpp" line="145"/>
<source>[F] Downloading</source>
<comment>Used when the torrent is forced started. You probably shouldn&apos;t translate the F.</comment>
<comment>Used when the torrent is forced started. You probably shouldn't translate the F.</comment>
<translation>[F] Endirilir</translation>
</message>
<message>
@@ -10589,7 +10579,7 @@ Başqa ad verin və yenidən cəhd edin.</translation>
<message>
<location filename="../gui/transferlistmodel.cpp" line="148"/>
<source>[F] Seeding</source>
<comment>Used when the torrent is forced started. You probably shouldn&apos;t translate the F.</comment>
<comment>Used when the torrent is forced started. You probably shouldn't translate the F.</comment>
<translation>[F] Göndərilir</translation>
</message>
<message>
@@ -11362,7 +11352,7 @@ Başqa ad verin və yenidən cəhd edin.</translation>
<message>
<location filename="../webui/webapplication.cpp" line="161"/>
<source>Unacceptable session cookie name is specified: &apos;%1&apos;. Default one is used.</source>
<translation type="unfinished"></translation>
<translation>Sessiya kuki faylına verilmiş bu ad qəbuledilməzdir: &quot;%1&quot;. Standart bir ad istifadə edildi.</translation>
</message>
<message>
<location filename="../webui/webapplication.cpp" line="196"/>
@@ -11540,4 +11530,4 @@ Başqa ad verin və yenidən cəhd edin.</translation>
<translation>%1dəq</translation>
</message>
</context>
</TS>
</TS>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

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