Compare commits
	
		
			31 Commits
		
	
	
		
			dependabot
			...
			release-5.
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					da87be2b12 | ||
| 
						 | 
					891265b390 | ||
| 
						 | 
					f46e44d3ed | ||
| 
						 | 
					a4094a440d | ||
| 
						 | 
					46c3da21e1 | ||
| 
						 | 
					2f06ea2587 | ||
| 
						 | 
					cfbf6b73ff | ||
| 
						 | 
					c687a7d0d3 | ||
| 
						 | 
					009cc71f9b | ||
| 
						 | 
					de1cf208ce | ||
| 
						 | 
					5f49472fa4 | ||
| 
						 | 
					2076302170 | ||
| 
						 | 
					2a33e187eb | ||
| 
						 | 
					00149e03c0 | ||
| 
						 | 
					57d529c17a | ||
| 
						 | 
					d492fcf29a | ||
| 
						 | 
					d0caa35b39 | ||
| 
						 | 
					ec7a00af92 | ||
| 
						 | 
					76a3aba7e0 | ||
| 
						 | 
					7003ac3f4d | ||
| 
						 | 
					964be0fa1c | ||
| 
						 | 
					c1defceccf | ||
| 
						 | 
					260394623d | ||
| 
						 | 
					478c2d5b12 | ||
| 
						 | 
					49cfbd9a49 | ||
| 
						 | 
					d028f46fab | ||
| 
						 | 
					57b24a200e | ||
| 
						 | 
					269dfe87e0 | ||
| 
						 | 
					6a1c465d85 | ||
| 
						 | 
					bc7d5c1f8f | ||
| 
						 | 
					8aabef423c | 
							
								
								
									
										2
									
								
								.github/FUNDING.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -1 +1 @@
 | 
			
		||||
custom: "https://www.qbittorrent.org/donate"
 | 
			
		||||
custom: "https://www.qbittorrent.org/donate.php"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										18
									
								
								.github/workflows/ci_file_health.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -16,12 +16,12 @@ jobs:
 | 
			
		||||
      security-events: write
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout repository
 | 
			
		||||
        uses: actions/checkout@v5
 | 
			
		||||
        uses: actions/checkout@v4
 | 
			
		||||
        with:
 | 
			
		||||
          persist-credentials: false
 | 
			
		||||
 | 
			
		||||
      - name: Setup python
 | 
			
		||||
        uses: actions/setup-python@v6
 | 
			
		||||
        uses: actions/setup-python@v5
 | 
			
		||||
        with:
 | 
			
		||||
          python-version: "*"
 | 
			
		||||
 | 
			
		||||
@@ -36,7 +36,7 @@ jobs:
 | 
			
		||||
          curl \
 | 
			
		||||
            -L \
 | 
			
		||||
            -o "${{ runner.temp }}/pandoc.tar.gz" \
 | 
			
		||||
            "https://github.com/jgm/pandoc/releases/download/3.7.0.2/pandoc-3.7.0.2-linux-amd64.tar.gz"
 | 
			
		||||
            "https://github.com/jgm/pandoc/releases/download/3.6/pandoc-3.6-linux-amd64.tar.gz"
 | 
			
		||||
          tar -xf "${{ runner.temp }}/pandoc.tar.gz" -C "${{ github.workspace }}/.."
 | 
			
		||||
          mv "${{ github.workspace }}/.."/pandoc-* "${{ env.pandoc_path }}"
 | 
			
		||||
          # run pandoc
 | 
			
		||||
@@ -52,20 +52,20 @@ jobs:
 | 
			
		||||
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
        run: |
 | 
			
		||||
          pip install zizmor
 | 
			
		||||
          IGNORE_RULEID='(.ruleId != "zizmor/template-injection")
 | 
			
		||||
            and (.ruleId != "zizmor/unpinned-uses")'
 | 
			
		||||
          IGNORE_ID='(.id != "zizmor/template-injection")
 | 
			
		||||
            and (.id != "zizmor/unpinned-uses")'
 | 
			
		||||
          IGNORE_RULEID='(.ruleId != "template-injection")
 | 
			
		||||
            and (.ruleId != "unpinned-uses")'
 | 
			
		||||
          IGNORE_ID='(.id != "template-injection")
 | 
			
		||||
            and (.id != "unpinned-uses")'
 | 
			
		||||
          zizmor \
 | 
			
		||||
            --format sarif \
 | 
			
		||||
            --persona auditor \
 | 
			
		||||
            --pedantic \
 | 
			
		||||
            ./ \
 | 
			
		||||
            | jq "(.runs[].results |= map(select($IGNORE_RULEID)))
 | 
			
		||||
              | (.runs[].tool.driver.rules |= map(select($IGNORE_ID)))" \
 | 
			
		||||
            > "${{ runner.temp }}/zizmor_results.sarif"
 | 
			
		||||
 | 
			
		||||
      - name: Upload zizmor results
 | 
			
		||||
        uses: github/codeql-action/upload-sarif@v4
 | 
			
		||||
        uses: github/codeql-action/upload-sarif@v3
 | 
			
		||||
        with:
 | 
			
		||||
          category: zizmor
 | 
			
		||||
          sarif_file: "${{ runner.temp }}/zizmor_results.sarif"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										32
									
								
								.github/workflows/ci_macos.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -20,7 +20,7 @@ jobs:
 | 
			
		||||
      matrix:
 | 
			
		||||
        libt_version: ["2.0.11", "1.2.20"]
 | 
			
		||||
        qbt_gui: ["GUI=ON", "GUI=OFF"]
 | 
			
		||||
        qt_version: ["6.9.1"]
 | 
			
		||||
        qt_version: ["6.7.0"]
 | 
			
		||||
 | 
			
		||||
    env:
 | 
			
		||||
      boost_path: "${{ github.workspace }}/../boost"
 | 
			
		||||
@@ -28,7 +28,7 @@ jobs:
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout repository
 | 
			
		||||
        uses: actions/checkout@v5
 | 
			
		||||
        uses: actions/checkout@v4
 | 
			
		||||
        with:
 | 
			
		||||
          persist-credentials: false
 | 
			
		||||
 | 
			
		||||
@@ -43,8 +43,8 @@ jobs:
 | 
			
		||||
          command: |
 | 
			
		||||
            brew update > /dev/null
 | 
			
		||||
            brew install \
 | 
			
		||||
              cmake ninja \
 | 
			
		||||
              openssl@3 zlib
 | 
			
		||||
            # preinstalled on the image: cmake ninja
 | 
			
		||||
 | 
			
		||||
      - name: Setup ccache
 | 
			
		||||
        uses: Chocobo1/setup-ccache-action@v1
 | 
			
		||||
@@ -52,7 +52,7 @@ jobs:
 | 
			
		||||
          store_cache: ${{ github.ref == 'refs/heads/master' }}
 | 
			
		||||
          update_packager_index: false
 | 
			
		||||
          ccache_options: |
 | 
			
		||||
            max_size=1G
 | 
			
		||||
            max_size=2G
 | 
			
		||||
 | 
			
		||||
      - name: Install boost
 | 
			
		||||
        env:
 | 
			
		||||
@@ -70,9 +70,6 @@ jobs:
 | 
			
		||||
            tar -xf "${{ runner.temp }}/boost.tar.gz" -C "${{ github.workspace }}/.."; _exitCode="$?"
 | 
			
		||||
          fi
 | 
			
		||||
          mv "${{ github.workspace }}/.."/boost_* "${{ env.boost_path }}"
 | 
			
		||||
          cd "${{ env.boost_path }}"
 | 
			
		||||
          ./bootstrap.sh
 | 
			
		||||
          ./b2 stage --stagedir=./ --with-headers
 | 
			
		||||
 | 
			
		||||
      - name: Install Qt
 | 
			
		||||
        uses: jurplel/install-qt-action@v4
 | 
			
		||||
@@ -98,7 +95,7 @@ jobs:
 | 
			
		||||
            -DCMAKE_BUILD_TYPE=RelWithDebInfo \
 | 
			
		||||
            -DCMAKE_CXX_STANDARD=20 \
 | 
			
		||||
            -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
 | 
			
		||||
            -DBOOST_ROOT="${{ env.boost_path }}/lib/cmake" \
 | 
			
		||||
            -DBOOST_ROOT="${{ env.boost_path }}" \
 | 
			
		||||
            -Ddeprecated-functions=OFF
 | 
			
		||||
          cmake --build build
 | 
			
		||||
          sudo cmake --install build
 | 
			
		||||
@@ -112,7 +109,7 @@ jobs:
 | 
			
		||||
            -G "Ninja" \
 | 
			
		||||
            -DCMAKE_BUILD_TYPE=RelWithDebInfo \
 | 
			
		||||
            -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
 | 
			
		||||
            -DBOOST_ROOT="${{ env.boost_path }}/lib/cmake" \
 | 
			
		||||
            -DBOOST_ROOT="${{ env.boost_path }}" \
 | 
			
		||||
            -DTESTING=ON \
 | 
			
		||||
            -DVERBOSE_CONFIGURE=ON \
 | 
			
		||||
            -D${{ matrix.qbt_gui }}
 | 
			
		||||
@@ -122,24 +119,17 @@ jobs:
 | 
			
		||||
 | 
			
		||||
      - name: Prepare build artifacts
 | 
			
		||||
        run: |
 | 
			
		||||
          # create .dmg
 | 
			
		||||
          appName="qbittorrent"
 | 
			
		||||
          if [ "${{ matrix.qbt_gui }}" = "GUI=OFF" ]; then
 | 
			
		||||
            appName="qbittorrent-nox"
 | 
			
		||||
          fi
 | 
			
		||||
          # package
 | 
			
		||||
          pushd build
 | 
			
		||||
          # packaging
 | 
			
		||||
          macdeployqt "$appName.app" -no-strip
 | 
			
		||||
          # code signing
 | 
			
		||||
          xattr -cr "$appName.app"
 | 
			
		||||
          codesign --force --sign - \
 | 
			
		||||
            "$appName.app" \
 | 
			
		||||
            "$appName.app/Contents/Frameworks"/* \
 | 
			
		||||
            "$appName.app/Contents/MacOS/$appName"
 | 
			
		||||
          codesign --verify --deep --strict -v "$appName.app"
 | 
			
		||||
          # create .dmg
 | 
			
		||||
          PACKAGE_RETRY=0
 | 
			
		||||
          while [ "$PACKAGE_RETRY" -lt "3" ]; do
 | 
			
		||||
            if hdiutil create -fs HFS+ -srcfolder "$appName.app" -volname "$appName" "$appName.dmg"; then
 | 
			
		||||
            macdeployqt "$appName.app" -dmg -no-strip
 | 
			
		||||
            if [ -f "$appName.dmg" ]; then
 | 
			
		||||
              break
 | 
			
		||||
            fi
 | 
			
		||||
            sleep 5
 | 
			
		||||
@@ -156,7 +146,7 @@ jobs:
 | 
			
		||||
          cp ${{ env.libtorrent_path }}/build/compile_commands.json upload/cmake/libtorrent
 | 
			
		||||
 | 
			
		||||
      - name: Upload build artifacts
 | 
			
		||||
        uses: actions/upload-artifact@v5
 | 
			
		||||
        uses: actions/upload-artifact@v4
 | 
			
		||||
        with:
 | 
			
		||||
          name: qBittorrent-CI_macOS_${{ matrix.qbt_gui }}_libtorrent-${{ matrix.libt_version }}_Qt-${{ matrix.qt_version }}
 | 
			
		||||
          path: upload
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										48
									
								
								.github/workflows/ci_python.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -15,17 +15,17 @@ jobs:
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout repository
 | 
			
		||||
        uses: actions/checkout@v5
 | 
			
		||||
        uses: actions/checkout@v4
 | 
			
		||||
        with:
 | 
			
		||||
          persist-credentials: false
 | 
			
		||||
 | 
			
		||||
      - name: Setup python (auxiliary scripts)
 | 
			
		||||
        uses: actions/setup-python@v6
 | 
			
		||||
        uses: actions/setup-python@v5
 | 
			
		||||
        with:
 | 
			
		||||
          python-version: '3'  # use default version
 | 
			
		||||
 | 
			
		||||
      - name: Install tools (auxiliary scripts)
 | 
			
		||||
        run: pip install bandit isort pycodestyle pyflakes
 | 
			
		||||
        run: pip install bandit pycodestyle pyflakes
 | 
			
		||||
 | 
			
		||||
      - name: Gather files (auxiliary scripts)
 | 
			
		||||
        run: |
 | 
			
		||||
@@ -44,40 +44,48 @@ jobs:
 | 
			
		||||
            --max-line-length=1000 \
 | 
			
		||||
            --statistics \
 | 
			
		||||
            $PY_FILES
 | 
			
		||||
          isort \
 | 
			
		||||
             --check \
 | 
			
		||||
             --diff \
 | 
			
		||||
             $PY_FILES
 | 
			
		||||
 | 
			
		||||
      - name: Build code (auxiliary scripts)
 | 
			
		||||
        run: |
 | 
			
		||||
          python -m compileall $PY_FILES
 | 
			
		||||
 | 
			
		||||
      - name: Setup python (search engine)
 | 
			
		||||
        uses: actions/setup-python@v6
 | 
			
		||||
        uses: actions/setup-python@v5
 | 
			
		||||
        with:
 | 
			
		||||
          python-version: '3.9'
 | 
			
		||||
 | 
			
		||||
      - name: Install tools (search engine)
 | 
			
		||||
        working-directory: src/searchengine/nova3
 | 
			
		||||
        run: pip install bandit mypy pycodestyle pyflakes pyright
 | 
			
		||||
 | 
			
		||||
      - name: Gather files (search engine)
 | 
			
		||||
        run: |
 | 
			
		||||
          pip install uv
 | 
			
		||||
          uv sync
 | 
			
		||||
          export "PY_FILES=$(find . -type f -name '*.py' -path '*searchengine*' ! -name 'socks.py' -printf '%p ')"
 | 
			
		||||
          echo $PY_FILES
 | 
			
		||||
          echo "PY_FILES=$PY_FILES" >> "$GITHUB_ENV"
 | 
			
		||||
 | 
			
		||||
      - name: Check typings (search engine)
 | 
			
		||||
        working-directory: src/searchengine/nova3
 | 
			
		||||
        run: uv run just check
 | 
			
		||||
        run: |
 | 
			
		||||
          MYPYPATH="src/searchengine/nova3" \
 | 
			
		||||
          mypy \
 | 
			
		||||
            --follow-imports skip \
 | 
			
		||||
            --strict \
 | 
			
		||||
            $PY_FILES
 | 
			
		||||
          pyright \
 | 
			
		||||
            $PY_FILES
 | 
			
		||||
 | 
			
		||||
      - name: Lint code (search engine)
 | 
			
		||||
        working-directory: src/searchengine/nova3
 | 
			
		||||
        run: uv run just lint
 | 
			
		||||
        run: |
 | 
			
		||||
          pyflakes $PY_FILES
 | 
			
		||||
          bandit --skip B110,B310,B314,B405 $PY_FILES
 | 
			
		||||
 | 
			
		||||
      - name: Format code (search engine)
 | 
			
		||||
        working-directory: src/searchengine/nova3
 | 
			
		||||
        run: |
 | 
			
		||||
          uv run just format
 | 
			
		||||
          git diff --exit-code
 | 
			
		||||
          pycodestyle \
 | 
			
		||||
            --ignore=E265,E402 \
 | 
			
		||||
            --max-line-length=1000 \
 | 
			
		||||
            --statistics \
 | 
			
		||||
            $PY_FILES
 | 
			
		||||
 | 
			
		||||
      - name: Build code (search engine)
 | 
			
		||||
        working-directory: src/searchengine/nova3
 | 
			
		||||
        run: uv run just build
 | 
			
		||||
        run: |
 | 
			
		||||
          python -m compileall $PY_FILES
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										20
									
								
								.github/workflows/ci_ubuntu.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -21,7 +21,7 @@ jobs:
 | 
			
		||||
      matrix:
 | 
			
		||||
        libt_version: ["2.0.11", "1.2.20"]
 | 
			
		||||
        qbt_gui: ["GUI=ON", "GUI=OFF"]
 | 
			
		||||
        qt_version: ["6.6.3"]
 | 
			
		||||
        qt_version: ["6.5.2"]
 | 
			
		||||
 | 
			
		||||
    env:
 | 
			
		||||
      boost_path: "${{ github.workspace }}/../boost"
 | 
			
		||||
@@ -30,7 +30,7 @@ jobs:
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout repository
 | 
			
		||||
        uses: actions/checkout@v5
 | 
			
		||||
        uses: actions/checkout@v4
 | 
			
		||||
        with:
 | 
			
		||||
          persist-credentials: false
 | 
			
		||||
 | 
			
		||||
@@ -47,7 +47,7 @@ jobs:
 | 
			
		||||
          store_cache: ${{ github.ref == 'refs/heads/master' }}
 | 
			
		||||
          update_packager_index: false
 | 
			
		||||
          ccache_options: |
 | 
			
		||||
            max_size=1G
 | 
			
		||||
            max_size=2G
 | 
			
		||||
 | 
			
		||||
      - name: Install boost
 | 
			
		||||
        env:
 | 
			
		||||
@@ -65,9 +65,6 @@ jobs:
 | 
			
		||||
            tar -xf "${{ runner.temp }}/boost.tar.gz" -C "${{ github.workspace }}/.."; _exitCode="$?"
 | 
			
		||||
          fi
 | 
			
		||||
          mv "${{ github.workspace }}/.."/boost_* "${{ env.boost_path }}"
 | 
			
		||||
          cd "${{ env.boost_path }}"
 | 
			
		||||
          ./bootstrap.sh
 | 
			
		||||
          ./b2 stage --stagedir=./ --with-headers
 | 
			
		||||
 | 
			
		||||
      - name: Install Qt
 | 
			
		||||
        uses: jurplel/install-qt-action@v4
 | 
			
		||||
@@ -93,14 +90,14 @@ jobs:
 | 
			
		||||
            -DCMAKE_BUILD_TYPE=RelWithDebInfo \
 | 
			
		||||
            -DCMAKE_CXX_STANDARD=20 \
 | 
			
		||||
            -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
 | 
			
		||||
            -DBOOST_ROOT="${{ env.boost_path }}/lib/cmake" \
 | 
			
		||||
            -DBOOST_ROOT="${{ env.boost_path }}" \
 | 
			
		||||
            -Ddeprecated-functions=OFF
 | 
			
		||||
          cmake --build build
 | 
			
		||||
          sudo cmake --install build
 | 
			
		||||
 | 
			
		||||
      # to avoid scanning 3rdparty codebases, initialize it just before building qbt
 | 
			
		||||
      - name: Initialize CodeQL
 | 
			
		||||
        uses: github/codeql-action/init@v4
 | 
			
		||||
        uses: github/codeql-action/init@v3
 | 
			
		||||
        if: startsWith(matrix.libt_version, 2) && (matrix.qbt_gui == 'GUI=ON')
 | 
			
		||||
        with:
 | 
			
		||||
          config-file: ./.github/workflows/helper/codeql/cpp.yaml
 | 
			
		||||
@@ -115,7 +112,7 @@ jobs:
 | 
			
		||||
            -G "Ninja" \
 | 
			
		||||
            -DCMAKE_BUILD_TYPE=RelWithDebInfo \
 | 
			
		||||
            -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
 | 
			
		||||
            -DBOOST_ROOT="${{ env.boost_path }}/lib/cmake" \
 | 
			
		||||
            -DBOOST_ROOT="${{ env.boost_path }}" \
 | 
			
		||||
            -DCMAKE_INSTALL_PREFIX="/usr" \
 | 
			
		||||
            -DTESTING=ON \
 | 
			
		||||
            -DVERBOSE_CONFIGURE=ON \
 | 
			
		||||
@@ -126,7 +123,7 @@ jobs:
 | 
			
		||||
          DESTDIR="qbittorrent" cmake --install build
 | 
			
		||||
 | 
			
		||||
      - name: Run CodeQL analysis
 | 
			
		||||
        uses: github/codeql-action/analyze@v4
 | 
			
		||||
        uses: github/codeql-action/analyze@v3
 | 
			
		||||
        if: startsWith(matrix.libt_version, 2) && (matrix.qbt_gui == 'GUI=ON')
 | 
			
		||||
        with:
 | 
			
		||||
          category: ${{ github.base_ref || github.ref_name }}
 | 
			
		||||
@@ -162,7 +159,6 @@ jobs:
 | 
			
		||||
 | 
			
		||||
      - name: Package AppImage
 | 
			
		||||
        run: |
 | 
			
		||||
          rm -f "${{ runner.workspace }}/Qt/${{ matrix.qt_version }}/gcc_64/plugins/sqldrivers/libqsqlmimer.so"
 | 
			
		||||
          ./linuxdeploy-x86_64.AppImage --appdir qbittorrent --plugin qt
 | 
			
		||||
          rm qbittorrent/apprun-hooks/*
 | 
			
		||||
          cp .github/workflows/helper/appimage/export_vars.sh qbittorrent/apprun-hooks/export_vars.sh
 | 
			
		||||
@@ -171,7 +167,7 @@ jobs:
 | 
			
		||||
            ./linuxdeploy-x86_64.AppImage --appdir qbittorrent --output appimage
 | 
			
		||||
 | 
			
		||||
      - name: Upload build artifacts
 | 
			
		||||
        uses: actions/upload-artifact@v5
 | 
			
		||||
        uses: actions/upload-artifact@v4
 | 
			
		||||
        with:
 | 
			
		||||
          name: qBittorrent-CI_Ubuntu-x64_${{ matrix.qbt_gui }}_libtorrent-${{ matrix.libt_version }}_Qt-${{ matrix.qt_version }}
 | 
			
		||||
          path: upload
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										17
									
								
								.github/workflows/ci_webui.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -21,12 +21,12 @@ jobs:
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout repository
 | 
			
		||||
        uses: actions/checkout@v5
 | 
			
		||||
        uses: actions/checkout@v4
 | 
			
		||||
        with:
 | 
			
		||||
          persist-credentials: false
 | 
			
		||||
 | 
			
		||||
      - name: Setup nodejs
 | 
			
		||||
        uses: actions/setup-node@v6
 | 
			
		||||
        uses: actions/setup-node@v4
 | 
			
		||||
        with:
 | 
			
		||||
          node-version: 'lts/*'
 | 
			
		||||
 | 
			
		||||
@@ -34,30 +34,21 @@ jobs:
 | 
			
		||||
        run: |
 | 
			
		||||
          npm install
 | 
			
		||||
          npm ls
 | 
			
		||||
          echo "::group::npm ls --all"
 | 
			
		||||
          npm ls --all
 | 
			
		||||
          echo "::endgroup::"
 | 
			
		||||
 | 
			
		||||
      - name: Run tests
 | 
			
		||||
        run: npm test
 | 
			
		||||
 | 
			
		||||
      - name: Lint code
 | 
			
		||||
        if: ${{ !cancelled() }}
 | 
			
		||||
        run: npm run lint
 | 
			
		||||
 | 
			
		||||
      - name: Format code
 | 
			
		||||
        if: ${{ !cancelled() }}
 | 
			
		||||
        run: |
 | 
			
		||||
          npm run format
 | 
			
		||||
          git diff --exit-code
 | 
			
		||||
 | 
			
		||||
      - name: Initialize CodeQL
 | 
			
		||||
        uses: github/codeql-action/init@v4
 | 
			
		||||
        if: ${{ !cancelled() }}
 | 
			
		||||
        uses: github/codeql-action/init@v3
 | 
			
		||||
        with:
 | 
			
		||||
          config-file: .github/workflows/helper/codeql/js.yaml
 | 
			
		||||
          languages: javascript
 | 
			
		||||
 | 
			
		||||
      - name: Run CodeQL analysis
 | 
			
		||||
        if: ${{ !cancelled() }}
 | 
			
		||||
        uses: github/codeql-action/analyze@v4
 | 
			
		||||
        uses: github/codeql-action/analyze@v3
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										61
									
								
								.github/workflows/ci_windows.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -10,8 +10,8 @@ concurrency:
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  ci:
 | 
			
		||||
    name: Build (${{ matrix.libt_version }}, ${{ matrix.config.arch }})
 | 
			
		||||
    runs-on: ${{ matrix.config.os }}
 | 
			
		||||
    name: Build
 | 
			
		||||
    runs-on: windows-latest
 | 
			
		||||
    permissions:
 | 
			
		||||
      actions: write
 | 
			
		||||
 | 
			
		||||
@@ -19,10 +19,6 @@ jobs:
 | 
			
		||||
      fail-fast: false
 | 
			
		||||
      matrix:
 | 
			
		||||
        libt_version: ["2.0.11", "1.2.20"]
 | 
			
		||||
        config:
 | 
			
		||||
        - os: windows-latest
 | 
			
		||||
          arch: x64
 | 
			
		||||
          qt_arch: win64_msvc2022_64
 | 
			
		||||
 | 
			
		||||
    env:
 | 
			
		||||
      boost_path: "${{ github.workspace }}/../boost"
 | 
			
		||||
@@ -31,14 +27,12 @@ jobs:
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout repository
 | 
			
		||||
        uses: actions/checkout@v5
 | 
			
		||||
        uses: actions/checkout@v4
 | 
			
		||||
        with:
 | 
			
		||||
          persist-credentials: false
 | 
			
		||||
 | 
			
		||||
      - name: Setup devcmd
 | 
			
		||||
        uses: ilammy/msvc-dev-cmd@v1
 | 
			
		||||
        with:
 | 
			
		||||
          arch: ${{ matrix.config.arch }}
 | 
			
		||||
 | 
			
		||||
      - name: Install build tools
 | 
			
		||||
        run: |
 | 
			
		||||
@@ -51,7 +45,7 @@ jobs:
 | 
			
		||||
 | 
			
		||||
      # https://learn.microsoft.com/en-us/vcpkg/users/binarycaching#gha
 | 
			
		||||
      - name: Set variables for vcpkg
 | 
			
		||||
        uses: actions/github-script@v8
 | 
			
		||||
        uses: actions/github-script@v7
 | 
			
		||||
        with:
 | 
			
		||||
          script: |
 | 
			
		||||
            core.exportVariable('ACTIONS_CACHE_URL', (process.env.ACTIONS_CACHE_URL || ''));
 | 
			
		||||
@@ -63,19 +57,18 @@ jobs:
 | 
			
		||||
          New-Item `
 | 
			
		||||
            -Force `
 | 
			
		||||
            -ItemType File `
 | 
			
		||||
            -Path "${{ env.vcpkg_path }}/triplets_overlay/${{ matrix.config.arch }}-windows-static-md-release.cmake"
 | 
			
		||||
            -Path "${{ env.vcpkg_path }}/triplets_overlay/x64-windows-static-md-release.cmake"
 | 
			
		||||
          # OpenSSL isn't compatible with `/guard:cf` flag so we omit it for now, see: https://github.com/openssl/openssl/issues/22554
 | 
			
		||||
          Add-Content `
 | 
			
		||||
            -Path "${{ env.vcpkg_path }}/triplets_overlay/${{ matrix.config.arch }}-windows-static-md-release.cmake" `
 | 
			
		||||
            -Value @("set(VCPKG_TARGET_ARCHITECTURE ${{ matrix.config.arch }})",
 | 
			
		||||
            -Path "${{ env.vcpkg_path }}/triplets_overlay/x64-windows-static-md-release.cmake" `
 | 
			
		||||
            -Value @("set(VCPKG_TARGET_ARCHITECTURE x64)",
 | 
			
		||||
              "set(VCPKG_LIBRARY_LINKAGE static)",
 | 
			
		||||
              "set(VCPKG_CRT_LINKAGE dynamic)",
 | 
			
		||||
              "set(VCPKG_BUILD_TYPE release)")
 | 
			
		||||
          # clear buildtrees after each package installation to reduce disk space requirements
 | 
			
		||||
          $packages = `
 | 
			
		||||
            "boost-build:${{ matrix.config.arch }}-windows-static-md-release",
 | 
			
		||||
            "openssl:${{ matrix.config.arch }}-windows-static-md-release",
 | 
			
		||||
            "zlib:${{ matrix.config.arch }}-windows-static-md-release"
 | 
			
		||||
            "openssl:x64-windows-static-md-release",
 | 
			
		||||
            "zlib:x64-windows-static-md-release"
 | 
			
		||||
          ${{ env.vcpkg_path }}/vcpkg.exe upgrade `
 | 
			
		||||
            --no-dry-run `
 | 
			
		||||
            --overlay-triplets="${{ env.vcpkg_path }}/triplets_overlay"
 | 
			
		||||
@@ -101,19 +94,12 @@ jobs:
 | 
			
		||||
            tar -xf "${{ runner.temp }}/boost.tar.gz" -C "${{ github.workspace }}/.."
 | 
			
		||||
          }
 | 
			
		||||
          move "${{ github.workspace }}/../boost_*" "${{ env.boost_path }}"
 | 
			
		||||
          cd "${{ env.boost_path }}"
 | 
			
		||||
          #.\bootstrap.bat
 | 
			
		||||
          ${{ env.vcpkg_path }}/installed/${{ matrix.config.arch }}-windows-static-md-release/tools/boost-build/b2.exe `
 | 
			
		||||
            stage `
 | 
			
		||||
            toolset=msvc `
 | 
			
		||||
            --stagedir=.\ `
 | 
			
		||||
            --with-headers
 | 
			
		||||
 | 
			
		||||
      - name: Install Qt
 | 
			
		||||
        uses: jurplel/install-qt-action@v4
 | 
			
		||||
        with:
 | 
			
		||||
          version: "6.9.1"
 | 
			
		||||
          arch: ${{ matrix.config.qt_arch }}
 | 
			
		||||
          version: "6.8.0"
 | 
			
		||||
          arch: win64_msvc2022_64
 | 
			
		||||
          archives: qtbase qtsvg qttools
 | 
			
		||||
          cache: true
 | 
			
		||||
 | 
			
		||||
@@ -127,7 +113,7 @@ jobs:
 | 
			
		||||
            ${{ env.libtorrent_path }}
 | 
			
		||||
          cd ${{ env.libtorrent_path }}
 | 
			
		||||
          $env:CXXFLAGS+=" /guard:cf"
 | 
			
		||||
          $env:LDFLAGS+=" /GUARD:CF"
 | 
			
		||||
          $env:LDFLAGS+=" /guard:cf"
 | 
			
		||||
          cmake `
 | 
			
		||||
            -B build `
 | 
			
		||||
            -G "Ninja" `
 | 
			
		||||
@@ -136,11 +122,11 @@ jobs:
 | 
			
		||||
            -DCMAKE_EXPORT_COMPILE_COMMANDS=ON `
 | 
			
		||||
            -DCMAKE_INSTALL_PREFIX="${{ env.libtorrent_path }}/install" `
 | 
			
		||||
            -DCMAKE_TOOLCHAIN_FILE="${{ env.vcpkg_path }}/scripts/buildsystems/vcpkg.cmake" `
 | 
			
		||||
            -DBOOST_ROOT="${{ env.boost_path }}/lib/cmake" `
 | 
			
		||||
            -DBOOST_ROOT="${{ env.boost_path }}" `
 | 
			
		||||
            -DBUILD_SHARED_LIBS=OFF `
 | 
			
		||||
            -Ddeprecated-functions=OFF `
 | 
			
		||||
            -Dstatic_runtime=OFF `
 | 
			
		||||
            -DVCPKG_TARGET_TRIPLET=${{ matrix.config.arch }}-windows-static-md-release
 | 
			
		||||
            -DVCPKG_TARGET_TRIPLET=x64-windows-static-md-release
 | 
			
		||||
          cmake --build build
 | 
			
		||||
          cmake --install build
 | 
			
		||||
 | 
			
		||||
@@ -153,11 +139,11 @@ jobs:
 | 
			
		||||
            -DCMAKE_BUILD_TYPE=RelWithDebInfo `
 | 
			
		||||
            -DCMAKE_EXPORT_COMPILE_COMMANDS=ON `
 | 
			
		||||
            -DCMAKE_TOOLCHAIN_FILE="${{ env.vcpkg_path }}/scripts/buildsystems/vcpkg.cmake" `
 | 
			
		||||
            -DBOOST_ROOT="${{ env.boost_path }}/lib/cmake" `
 | 
			
		||||
            -DBOOST_ROOT="${{ env.boost_path }}" `
 | 
			
		||||
            -DLibtorrentRasterbar_DIR="${{ env.libtorrent_path }}/install/lib/cmake/LibtorrentRasterbar" `
 | 
			
		||||
            -DMSVC_RUNTIME_DYNAMIC=ON `
 | 
			
		||||
            -DTESTING=ON `
 | 
			
		||||
            -DVCPKG_TARGET_TRIPLET=${{ matrix.config.arch }}-windows-static-md-release `
 | 
			
		||||
            -DVCPKG_TARGET_TRIPLET=x64-windows-static-md-release `
 | 
			
		||||
            -DVERBOSE_CONFIGURE=ON `
 | 
			
		||||
            --graphviz=build/target_graph.dot
 | 
			
		||||
          cmake --build build --target qbt_update_translations
 | 
			
		||||
@@ -200,23 +186,18 @@ jobs:
 | 
			
		||||
          copy ${{ env.libtorrent_path }}/build/compile_commands.json upload/cmake/libtorrent
 | 
			
		||||
 | 
			
		||||
      - name: Upload build artifacts
 | 
			
		||||
        uses: actions/upload-artifact@v5
 | 
			
		||||
        uses: actions/upload-artifact@v4
 | 
			
		||||
        with:
 | 
			
		||||
          name: qBittorrent-CI_Windows-${{ matrix.config.arch }}_libtorrent-${{ matrix.libt_version }}
 | 
			
		||||
          name: qBittorrent-CI_Windows-x64_libtorrent-${{ matrix.libt_version }}
 | 
			
		||||
          path: upload
 | 
			
		||||
 | 
			
		||||
      - name: Install NSIS
 | 
			
		||||
        uses: repolevedavaj/install-nsis@a55ed92772254d1e51d880f85ce9b5719f907801 # v1.1.0
 | 
			
		||||
        with:
 | 
			
		||||
          nsis-version: '3.11'
 | 
			
		||||
 | 
			
		||||
      - name: Create installer
 | 
			
		||||
        run: |
 | 
			
		||||
          7z x -o"dist/windows/" "dist/windows/NSISPlugins.zip"
 | 
			
		||||
          makensis /DQBT_CPU_ARCH="${{ matrix.config.arch }}" /DQBT_DIST_DIR="../../upload/qBittorrent" /WX dist/windows/qbittorrent.nsi
 | 
			
		||||
          makensis /DQBT_DIST_DIR="../../upload/qBittorrent" /WX dist/windows/qbittorrent.nsi
 | 
			
		||||
 | 
			
		||||
      - name: Upload installer
 | 
			
		||||
        uses: actions/upload-artifact@v5
 | 
			
		||||
        uses: actions/upload-artifact@v4
 | 
			
		||||
        with:
 | 
			
		||||
          name: qBittorrent-CI_Windows-${{ matrix.config.arch }}_libtorrent-${{ matrix.libt_version }}-setup
 | 
			
		||||
          name: qBittorrent-CI_Windows-x64_libtorrent-${{ matrix.libt_version }}-setup
 | 
			
		||||
          path: dist/windows/qbittorrent_*_setup.exe
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										13
									
								
								.github/workflows/coverity-scan.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -16,7 +16,7 @@ jobs:
 | 
			
		||||
      matrix:
 | 
			
		||||
        libt_version: ["2.0.11"]
 | 
			
		||||
        qbt_gui: ["GUI=ON"]
 | 
			
		||||
        qt_version: ["6.9.1"]
 | 
			
		||||
        qt_version: ["6.5.2"]
 | 
			
		||||
 | 
			
		||||
    env:
 | 
			
		||||
      boost_path: "${{ github.workspace }}/../boost"
 | 
			
		||||
@@ -25,7 +25,7 @@ jobs:
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout repository
 | 
			
		||||
        uses: actions/checkout@v5
 | 
			
		||||
        uses: actions/checkout@v4
 | 
			
		||||
        with:
 | 
			
		||||
          persist-credentials: false
 | 
			
		||||
 | 
			
		||||
@@ -39,7 +39,7 @@ jobs:
 | 
			
		||||
      - name: Install boost
 | 
			
		||||
        env:
 | 
			
		||||
          BOOST_MAJOR_VERSION: "1"
 | 
			
		||||
          BOOST_MINOR_VERSION: "88"
 | 
			
		||||
          BOOST_MINOR_VERSION: "86"
 | 
			
		||||
          BOOST_PATCH_VERSION: "0"
 | 
			
		||||
        run: |
 | 
			
		||||
          boost_url="https://archives.boost.io/release/${{ env.BOOST_MAJOR_VERSION }}.${{ env.BOOST_MINOR_VERSION }}.${{ env.BOOST_PATCH_VERSION }}/source/boost_${{ env.BOOST_MAJOR_VERSION }}_${{ env.BOOST_MINOR_VERSION }}_${{ env.BOOST_PATCH_VERSION }}.tar.gz"
 | 
			
		||||
@@ -52,9 +52,6 @@ jobs:
 | 
			
		||||
            tar -xf "${{ runner.temp }}/boost.tar.gz" -C "${{ github.workspace }}/.."; _exitCode="$?"
 | 
			
		||||
          fi
 | 
			
		||||
          mv "${{ github.workspace }}/.."/boost_* "${{ env.boost_path }}"
 | 
			
		||||
          cd "${{ env.boost_path }}"
 | 
			
		||||
          ./bootstrap.sh
 | 
			
		||||
          ./b2 stage --stagedir=./ --with-headers
 | 
			
		||||
 | 
			
		||||
      - name: Install Qt
 | 
			
		||||
        uses: jurplel/install-qt-action@v4
 | 
			
		||||
@@ -77,7 +74,7 @@ jobs:
 | 
			
		||||
            -G "Ninja" \
 | 
			
		||||
            -DCMAKE_BUILD_TYPE=RelWithDebInfo \
 | 
			
		||||
            -DCMAKE_CXX_STANDARD=20 \
 | 
			
		||||
            -DBOOST_ROOT="${{ env.boost_path }}/lib/cmake" \
 | 
			
		||||
            -DBOOST_ROOT="${{ env.boost_path }}" \
 | 
			
		||||
            -Ddeprecated-functions=OFF
 | 
			
		||||
          cmake --build build
 | 
			
		||||
          sudo cmake --install build
 | 
			
		||||
@@ -101,7 +98,7 @@ jobs:
 | 
			
		||||
            -B build \
 | 
			
		||||
            -G "Ninja" \
 | 
			
		||||
            -DCMAKE_BUILD_TYPE=RelWithDebInfo \
 | 
			
		||||
            -DBOOST_ROOT="${{ env.boost_path }}/lib/cmake" \
 | 
			
		||||
            -DBOOST_ROOT="${{ env.boost_path }}" \
 | 
			
		||||
            -DVERBOSE_CONFIGURE=ON \
 | 
			
		||||
            -D${{ matrix.qbt_gui }}
 | 
			
		||||
          PATH="${{ env.coverity_path }}/bin:$PATH" \
 | 
			
		||||
 
 | 
			
		||||
@@ -26,12 +26,12 @@
 | 
			
		||||
# but you are not obligated to do so. If you do not wish to do so, delete this
 | 
			
		||||
# exception statement from your version.
 | 
			
		||||
 | 
			
		||||
import argparse
 | 
			
		||||
import re
 | 
			
		||||
import sys
 | 
			
		||||
import xml.etree.ElementTree as ElementTree
 | 
			
		||||
from collections.abc import Callable, Sequence
 | 
			
		||||
from typing import Optional
 | 
			
		||||
import argparse
 | 
			
		||||
import re
 | 
			
		||||
import xml.etree.ElementTree as ElementTree
 | 
			
		||||
import sys
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def traversePostOrder(root: ElementTree.Element, visitFunc: Callable[[ElementTree.Element], None]) -> None:
 | 
			
		||||
 
 | 
			
		||||
@@ -26,11 +26,11 @@
 | 
			
		||||
# but you are not obligated to do so. If you do not wish to do so, delete this
 | 
			
		||||
# exception statement from your version.
 | 
			
		||||
 | 
			
		||||
from collections.abc import Sequence
 | 
			
		||||
from typing import Optional
 | 
			
		||||
import argparse
 | 
			
		||||
import re
 | 
			
		||||
import sys
 | 
			
		||||
from collections.abc import Sequence
 | 
			
		||||
from typing import Optional
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def main(argv: Optional[Sequence[str]] = None) -> int:
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								.github/workflows/stale_bot.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -13,7 +13,7 @@ jobs:
 | 
			
		||||
      pull-requests: write
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Mark and close stale PRs
 | 
			
		||||
        uses: actions/stale@v10
 | 
			
		||||
        uses: actions/stale@v9
 | 
			
		||||
        with:
 | 
			
		||||
          stale-pr-message: "This PR is stale because it has been 60 days with no activity. This PR will be automatically closed within 7 days if there is no further activity."
 | 
			
		||||
          close-pr-message: "This PR was closed because it has been stalled for some time with no activity."
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -1,5 +1,4 @@
 | 
			
		||||
.vscode/
 | 
			
		||||
 | 
			
		||||
src/gui/geoip/GeoIP.dat
 | 
			
		||||
src/gui/geoip/GeoIP.dat.gz
 | 
			
		||||
src/qbittorrent
 | 
			
		||||
@@ -11,6 +10,7 @@ CMakeLists.txt.user*
 | 
			
		||||
qbittorrent.pro.user*
 | 
			
		||||
conf.pri
 | 
			
		||||
Makefile*
 | 
			
		||||
*.pyc
 | 
			
		||||
*.log
 | 
			
		||||
 | 
			
		||||
# Compiled object files
 | 
			
		||||
 
 | 
			
		||||
@@ -19,7 +19,7 @@ repos:
 | 
			
		||||
          - ts
 | 
			
		||||
 | 
			
		||||
  - repo: https://github.com/pre-commit/pre-commit-hooks.git
 | 
			
		||||
    rev: v6.0.0
 | 
			
		||||
    rev: v5.0.0
 | 
			
		||||
    hooks:
 | 
			
		||||
    - id: check-json
 | 
			
		||||
      name: Check JSON files
 | 
			
		||||
@@ -69,11 +69,11 @@ repos:
 | 
			
		||||
        - ts
 | 
			
		||||
 | 
			
		||||
  - repo: https://github.com/codespell-project/codespell.git
 | 
			
		||||
    rev: v2.4.1
 | 
			
		||||
    rev: v2.4.0
 | 
			
		||||
    hooks:
 | 
			
		||||
    - id: codespell
 | 
			
		||||
      name: Check spelling (codespell)
 | 
			
		||||
      args: ["--ignore-words-list", "additionals,categor,curren,fo,indexIn,ist,ket,notin,searchin,sectionin,superseeding,te,ths"]
 | 
			
		||||
      args: ["--ignore-words-list", "additionals,categor,curren,fo,ist,ket,notin,searchin,sectionin,superseeding,te,ths"]
 | 
			
		||||
      exclude: |
 | 
			
		||||
        (?x)^(
 | 
			
		||||
          .*\.desktop |
 | 
			
		||||
@@ -88,7 +88,7 @@ repos:
 | 
			
		||||
        - ts
 | 
			
		||||
 | 
			
		||||
  - repo: https://github.com/crate-ci/typos.git
 | 
			
		||||
    rev: v1.35.3
 | 
			
		||||
    rev: v1.29.4
 | 
			
		||||
    hooks:
 | 
			
		||||
    - id: typos
 | 
			
		||||
      name: Check spelling (typos)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
[main]
 | 
			
		||||
host = https://www.transifex.com
 | 
			
		||||
 | 
			
		||||
[o:sledgehammer999:p:qbittorrent:r:qbittorrent_master]
 | 
			
		||||
[o:sledgehammer999:p:qbittorrent:r:qbittorrent_v51x]
 | 
			
		||||
file_filter  = src/lang/qbittorrent_<lang>.ts
 | 
			
		||||
source_file  = src/lang/qbittorrent_en.ts
 | 
			
		||||
source_lang  = en
 | 
			
		||||
@@ -9,7 +9,7 @@ type         = QT
 | 
			
		||||
minimum_perc = 23
 | 
			
		||||
lang_map     = pt: pt_PT, zh: zh_CN
 | 
			
		||||
 | 
			
		||||
[o:sledgehammer999:p:qbittorrent:r:qbittorrent_webui]
 | 
			
		||||
[o:sledgehammer999:p:qbittorrent:r:qbittorrent_webui_v51x]
 | 
			
		||||
file_filter  = src/webui/www/translations/webui_<lang>.ts
 | 
			
		||||
source_file  = src/webui/www/translations/webui_en.ts
 | 
			
		||||
source_lang  = en
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@ project(qBittorrent
 | 
			
		||||
 | 
			
		||||
# version requirements - older versions may work, but you are on your own
 | 
			
		||||
set(minBoostVersion 1.76)
 | 
			
		||||
set(minQt6Version 6.6.0)
 | 
			
		||||
set(minQt6Version 6.5.0)
 | 
			
		||||
set(minOpenSSLVersion 3.0.2)
 | 
			
		||||
set(minLibtorrent1Version 1.2.19)
 | 
			
		||||
set(minLibtorrentVersion 2.0.10)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										93
									
								
								Changelog
									
									
									
									
									
								
							
							
						
						@@ -1,4 +1,95 @@
 | 
			
		||||
Unreleased - sledgehammer999 <sledgehammer999@qbittorrent.org> - v5.1.0
 | 
			
		||||
Sun Apr 27th 2025 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v5.1.0
 | 
			
		||||
    - FEATURE: Enable customizing the save statistics time interval (Burnerelu)
 | 
			
		||||
    - FEATURE: Add drag support to torrent content widget (Chocobo1)
 | 
			
		||||
    - FEATURE: Display External IP Address in status bar (Thomas Piccirello)
 | 
			
		||||
    - FEATURE: Use modern functions to get random numbers under Linux/Windows (security related) (Chocobo1)
 | 
			
		||||
    - FEATURE: Add eXact Length parameter when creating magnet URI (antanilol)
 | 
			
		||||
    - FEATURE: Support fetching tracker list from URL (Thomas Piccirello)
 | 
			
		||||
    - FEATURE: Add `announce_port` support (Maxime Thiebaut)
 | 
			
		||||
    - BUGFIX: Enable adaptive step size for upload and download limits (Harald Nordgren)
 | 
			
		||||
    - BUGFIX: Add URL link for reverse proxy setup examples (Chocobo1)
 | 
			
		||||
    - BUGFIX: Allow drop action only on transfer list (Chocobo1)
 | 
			
		||||
    - BUGFIX: Fix the tab order in dialogs (thalieht)
 | 
			
		||||
    - BUGFIX: Fix filesize sorting in preview dialog (DoubleSpicy)
 | 
			
		||||
    - BUGFIX: Improve the speed icons in the status bar (Mahdi Hosseinzadeh)
 | 
			
		||||
    - BUGFIX: Update link to news (tinyboxvk)
 | 
			
		||||
    - BUGFIX: Fix tab stop order in various dialogs and UI elements (Chocobo1)
 | 
			
		||||
    - BUGFIX: Make links accessible by keyboard (Chocobo1)
 | 
			
		||||
    - BUGFIX: Make tab key switch focus (Chocobo1)
 | 
			
		||||
    - BUGFIX: Revise DHT bootstrap node list (stalkerok, Chocobo1)
 | 
			
		||||
    - BUGFIX: Return first tracker as fallback for "current tracker" (glassez)
 | 
			
		||||
    - BUGFIX: Prevent crash when exiting app with `Add torrent` dialogs opened (glassez)
 | 
			
		||||
    - BUGFIX: Fix torrent relocating files when switching to "manual" mode (glassez)
 | 
			
		||||
    - BUGFIX: Prevent crash due to corrupted resume data (glassez)
 | 
			
		||||
    - WEBUI: Improvements that should help with assistive technologies (Chocobo1)
 | 
			
		||||
    - WEBUI: Internal refactoring to migrate away from MooTools and towards native browser APIs (Chocobo1, skomerko)
 | 
			
		||||
    - WEBUI: Implement path autocompletion (Paweł Kotiuk)
 | 
			
		||||
    - WEBUI: Implement double-click behavior controls (Hanabishi)
 | 
			
		||||
    - WEBUI: Add ability to toggle alternating row colors in tables (skomerko)
 | 
			
		||||
    - WEBUI: Improve visibility of unread RSS articles (skomerko)
 | 
			
		||||
    - WEBUI: Remove deleted torrents even if they are currently filtered out (Carmelo Scandaliato)
 | 
			
		||||
    - WEBUI: Highlight torrent category in context menu (skomerko)
 | 
			
		||||
    - WEBUI: Implement 'Auto hide zero status filters' (skomerko)
 | 
			
		||||
    - WEBUI: Allow to filter torrent list by save path (skomerko)
 | 
			
		||||
    - WEBUI: Handle regex syntax error for torrent filtering (HamletDuFromage)
 | 
			
		||||
    - WEBUI: Add missing icons (skomerko)
 | 
			
		||||
    - WEBUI: Add link to 'List of alternative WebUI' wiki page in Options (Chocobo1)
 | 
			
		||||
    - WEBUI: Improve properties panel, torrent deletion dialog, filter list, subcategories, torrent deletion, statistics window (skomerko)
 | 
			
		||||
    - WEBUI: Allow to display only hostname in the Tracker column (skomerko)
 | 
			
		||||
    - WEBUI: Show country/region name next to its flag (skomerko)
 | 
			
		||||
    - WEBUI: Improve hash copy actions in context menu (skomerko)
 | 
			
		||||
    - WEBUI: Support removing tracker from all torrents in WebUI/WebAPI (Thomas Piccirello)
 | 
			
		||||
    - WEBUI: Display DHT information in the Status bar only when DHT is enabled (skomerko)
 | 
			
		||||
    - WEBUI: Add 'Confirm torrent recheck' option (skomerko)
 | 
			
		||||
    - WEBUI: Support managing web seeds (Thomas Piccirello)
 | 
			
		||||
    - WEBUI: Add colors to log table rows (skomerko)
 | 
			
		||||
    - WEBUI: Prevent text selection within tabs, menu items (skomerko)
 | 
			
		||||
    - WEBUI: Use correct text and background colors in RSS details view (skomerko)
 | 
			
		||||
    - WEBUI: Reduce padding in torrents table (skomerko)
 | 
			
		||||
    - WEBUI: Add WebAPI/WebUI for managing cookies (Thomas Piccirello)
 | 
			
		||||
    - WEBUI: Support updating RSS feed URL (Thomas Piccirello)
 | 
			
		||||
    - WEBUI: Add 'Engine' column to Search table (skomerko)
 | 
			
		||||
    - WEBUI: Add confirm dialog for Auto TMM (skomerko)
 | 
			
		||||
    - WEBUI: Add context menu to search tabs (skomerko)
 | 
			
		||||
    - WEBUI: Show file filter when Content tab selected on load (Thomas Piccirello)
 | 
			
		||||
    - WEBUI: DHT, PeX and LSD rows are now always on top in Trackers table (skomerko)
 | 
			
		||||
    - WEBUI: Clear properties panel when torrent no longer selected (skomerko)
 | 
			
		||||
    - WEBUI: Support auto resizing table columns (Thomas Piccirello)
 | 
			
		||||
    - WEBUI: Fix displaying RSS panel on load (Thomas Piccirello)
 | 
			
		||||
    - WEBUI: Add tooltip to regex filter button (Patrik Elfström)
 | 
			
		||||
    - WEBUI: Hide context menu when clicking on a table row (Patrik Elfström)
 | 
			
		||||
    - WEBUI: Display torrent progress percentage in General tab (skomerko)
 | 
			
		||||
    - WEBUI: Use thin scrollbars (skomerko)
 | 
			
		||||
    - WEBUI: Show 'Rename...' context menu item only when one torrent is selected (skomerko)
 | 
			
		||||
    - WEBUI: Display error when download fails (Thomas Piccirello)
 | 
			
		||||
    - WEBUI: Add colors to 'Status' column in Trackers table (skomerko)
 | 
			
		||||
    - WEBUI: Add missing icon to 'Queue' context menu item (skomerko)
 | 
			
		||||
    - WEBUI: Change filter inputs to type search (Patrik Elfström)
 | 
			
		||||
    - WEBUI: Allow to move state icon to name column in torrents table (skomerko)
 | 
			
		||||
    - WEBUI: Fix bug where the 'Tracker editing' dialog displays incorrect data (skomerko)
 | 
			
		||||
    - WEBUI: Maintain row highlight after rearranging table columns (skomerko)
 | 
			
		||||
    - WEBUI: Fix preferences not applied in magnet handler (Chocobo1)
 | 
			
		||||
    - WEBUI: Update sort icon after changing column order (skomerko)
 | 
			
		||||
    - WEBUI: Show 'Edit tracker URL...' only when one tracker is selected (skomerko)
 | 
			
		||||
    - WEBUI: Set status filter to 'All' if selected filter is no longer visible (skomerko)
 | 
			
		||||
    - WEBAPI: Don't reannounce when removing tracker via WebAPI (Thomas Piccirello)
 | 
			
		||||
    - WEBAPI: Add WebAPI for managing torrent webseeds (Thomas Piccirello)
 | 
			
		||||
    - WEBAPI: Add `forced` parameter to `torrents/add` (Chris B)
 | 
			
		||||
    - WEBAPI: Optionally include trackers list in torrent info response (ze0s)
 | 
			
		||||
    - WEBAPI: Add new method `setTags` to upsert tags on torrents (ze0s)
 | 
			
		||||
    - RSS: Resolve relative URLs within RSS article description (Zentino)
 | 
			
		||||
    - SEARCH: Provide SSL context field (Chocobo1)
 | 
			
		||||
    - SEARCH: Allow to refresh existing search (glassez)
 | 
			
		||||
    - SEARCH: Allow multiple simultaneous searches (glassez)
 | 
			
		||||
    - SEARCH: Store opened search tabs (glassez)
 | 
			
		||||
    - SEARCH: Store search history (glassez)
 | 
			
		||||
    - SEARCH: Migrate socks.py from SocksiPy to PySocks 1.7.1 (FredBill1)
 | 
			
		||||
    - SEARCH: Bump Python version minimum requirement (Chocobo1)
 | 
			
		||||
    - WINDOWS: Opt into Windows SegmentHeap (Andarwinux)
 | 
			
		||||
    - WINDOWS: Allow to choose color scheme on Windows (glassez)
 | 
			
		||||
    - WINDOWS: Verify hash of Python installer (Chocobo1)
 | 
			
		||||
    - LINUX: Add support for Thunar file manager (algebnaly)
 | 
			
		||||
    - MACOS: Fix shift-click selection on macOS (Luke Memet)
 | 
			
		||||
 | 
			
		||||
Mon Oct 28th 2024 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v5.0.1
 | 
			
		||||
    - FEATURE: Add "Simple pread/pwrite" disk IO type (Hanabishi)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								INSTALL
									
									
									
									
									
								
							
							
						
						@@ -11,7 +11,7 @@ qBittorrent - A BitTorrent client in C++ / Qt
 | 
			
		||||
 | 
			
		||||
  - OpenSSL >= 3.0.2
 | 
			
		||||
 | 
			
		||||
  - Qt 6.6.0 - 6.x
 | 
			
		||||
  - Qt 6.5.0 - 6.x
 | 
			
		||||
 | 
			
		||||
  - zlib >= 1.2.11
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,94 +0,0 @@
 | 
			
		||||
# WebAPI Changelog
 | 
			
		||||
 | 
			
		||||
## 2.14.1
 | 
			
		||||
* [#23212](https://github.com/qbittorrent/qBittorrent/pull/23212)
 | 
			
		||||
  * Add `app/rotateAPIKey` endpoint for generating, and rotating, the WebAPI API key
 | 
			
		||||
* [#23388](https://github.com/qbittorrent/qBittorrent/pull/23388)
 | 
			
		||||
  * Add `app/deleteAPIKey` endpoint for deleting the existing WebAPI API key
 | 
			
		||||
 | 
			
		||||
## 2.14.0
 | 
			
		||||
* [#23202](https://github.com/qbittorrent/qBittorrent/pull/23202)
 | 
			
		||||
  * WebAPI responds with the error message "Endpoint does not exist" when the endpoint does not exist, to better differentiate from unrelated Not Found (i.e. 404) responses
 | 
			
		||||
  * `auth/login` endpoint responds to invalid credentials with a 401
 | 
			
		||||
  * `torrents/add` endpoint responds with `success_count`, `pending_count`, `failure_count`, and `added_torrent_ids`
 | 
			
		||||
    * When `pending_count` is non-zero, response code 202 is used
 | 
			
		||||
    * When all torrents fail to be added, response code 409 is used
 | 
			
		||||
 | 
			
		||||
## 2.13.1
 | 
			
		||||
* [#23163](https://github.com/qbittorrent/qBittorrent/pull/23163)
 | 
			
		||||
  * `torrents/add` endpoint now supports downloading from a search plugin via the `downloader` parameter
 | 
			
		||||
  * `torrents/fetchMetadata` endpoint now supports fetching from a search plugin via the `downloader` parameter
 | 
			
		||||
* [#23088](https://github.com/qbittorrent/qBittorrent/pull/23088)
 | 
			
		||||
  * Add `clientdata/load` and `clientdata/store` endpoints for managing WebUI-specific client settings and other shared data
 | 
			
		||||
 | 
			
		||||
## 2.13.0
 | 
			
		||||
* [#23045](https://github.com/qbittorrent/qBittorrent/pull/23045)
 | 
			
		||||
  * `torrents/trackers` returns three new fields: `next_announce`, `min_announce` and `endpoints`
 | 
			
		||||
    * `endpoints` is an array of tracker endpoints, each with `name`, `updating`, `status`, `msg`, `bt_version`, `num_peers`, `num_peers`, `num_leeches`, `num_downloaded`, `next_announce` and `min_announce` fields
 | 
			
		||||
  *  `torrents/trackers` now returns `5` and `6` in `status` field as possible values
 | 
			
		||||
    * `5` for `Tracker error` and `6` for `Unreachable`
 | 
			
		||||
* [#22963](https://github.com/qbittorrent/qBittorrent/pull/22963)
 | 
			
		||||
  * `torrents/editTracker` endpoint now supports setting a tracker's tier via `tier` parameter
 | 
			
		||||
  * `torrents/editTracker` endpoint always responds with a 204 when successful
 | 
			
		||||
  * `torrents/editTracker` endpoint `origUrl` parameter renamed to `url`
 | 
			
		||||
* [#23061](https://github.com/qbittorrent/qBittorrent/pull/23061)
 | 
			
		||||
  * `sync/torrentPeers` returns one new field: `i2p_dest`, only when the peer is from I2P
 | 
			
		||||
    * In this case, the fields `ip` and `port` are not returned
 | 
			
		||||
* [#23085](https://github.com/qbittorrent/qBittorrent/pull/23085)
 | 
			
		||||
  * `torrents/parseMetadata` now responds with an array of metadata in the same order as the files in the request. It previously responded with an object keyed off of the submitted file name.
 | 
			
		||||
 | 
			
		||||
## 2.12.1
 | 
			
		||||
* [#23031](https://github.com/qbittorrent/qBittorrent/pull/23031)
 | 
			
		||||
  * Add `torrents/setComment` endpoint with parameters `hashes` and `comment` for setting a new torrent comment
 | 
			
		||||
 | 
			
		||||
## 2.12.0
 | 
			
		||||
 | 
			
		||||
* [#22989](https://github.com/qbittorrent/qBittorrent/pull/22989)
 | 
			
		||||
  * `sync/maindata` returns one new field: `share_limit_action`
 | 
			
		||||
  * `torrents/setShareLimits` now requires a new `shareLimitAction` param that sets a torrent's shareLimitAction property
 | 
			
		||||
    * possible values `Default`, `Stop`, `Remove`, `RemoveWithContent` and `EnableSuperSeeding`
 | 
			
		||||
 | 
			
		||||
## 2.11.10
 | 
			
		||||
 | 
			
		||||
* [#22958](https://github.com/qbittorrent/qBittorrent/pull/22958)
 | 
			
		||||
  * `torrents/categories` and `sync/maindata` now serialize categories' `downloadPath` to `null`, rather than `undefined`
 | 
			
		||||
* [#22954](https://github.com/qbittorrent/qBittorrent/pull/22954)
 | 
			
		||||
  * `torrents/reannounce` supports specifying individual trackers via `trackers` field
 | 
			
		||||
 | 
			
		||||
## 2.11.9
 | 
			
		||||
 | 
			
		||||
* [#21015](https://github.com/qbittorrent/qBittorrent/pull/21015)
 | 
			
		||||
  * Add `torrents/fetchMetadata` endpoint for retrieving torrent metadata associated with a URL
 | 
			
		||||
  * Add `torrents/parseMetadata` endpoint for retrieving torrent metadata associated with a .torrent file
 | 
			
		||||
  * Add `torrents/saveMetadata` endpoint for saving retrieved torrent metadata to a .torrent file
 | 
			
		||||
  * `torrents/add` allows adding a torrent with metadata previously retrieved via `torrents/fetchMetadata` or `torrents/parseMetadata`
 | 
			
		||||
  * `torrents/add` allows specifying a torrent's file priorities
 | 
			
		||||
* [#22698](https://github.com/qbittorrent/qBittorrent/pull/22698)
 | 
			
		||||
  * `torrents/addTrackers` and `torrents/removeTrackers` now accept `hash=all` and adds/removes the tracker to/from *all* torrents
 | 
			
		||||
    * For compatibility, `torrents/removeTrackers` still accepts `hash=*` internally we transform it into `all`
 | 
			
		||||
  * Allow passing a pipe (`|`) separated list of hashes in `hash` for `torrents/addTrackers` and `torrents/removeTrackers`
 | 
			
		||||
 | 
			
		||||
## 2.11.8
 | 
			
		||||
 | 
			
		||||
* [#21349](https://github.com/qbittorrent/qBittorrent/pull/21349)
 | 
			
		||||
  * Handle sending `204 No Content` status code when response contains no data
 | 
			
		||||
    * Some endpoints still return `200 OK` to ensure smooth transition
 | 
			
		||||
* [#22750](https://github.com/qbittorrent/qBittorrent/pull/22750)
 | 
			
		||||
  * `torrents/info` allows an optional parameter `includeFiles` that defaults to `false`
 | 
			
		||||
    * Each torrent will contain a new key `files` which will list all files similar to the `torrents/files` endpoint
 | 
			
		||||
* [#22813](https://github.com/qbittorrent/qBittorrent/pull/22813)
 | 
			
		||||
  * `app/getDirectoryContent` allows an optional parameter `withMetadata` to send file metadata
 | 
			
		||||
    * Fields are `name`, `type`, `size`, `creation_date`, `last_access_date`, `last_modification_date`
 | 
			
		||||
    * See PR for TypeScript types
 | 
			
		||||
 | 
			
		||||
## 2.11.7
 | 
			
		||||
 | 
			
		||||
* [#22166](https://github.com/qbittorrent/qBittorrent/pull/22166)
 | 
			
		||||
  * `sync/maindata` returns 3 new torrent fields: `has_tracker_warning`, `has_tracker_error`, `has_other_announce_error`
 | 
			
		||||
 | 
			
		||||
## 2.11.6
 | 
			
		||||
 | 
			
		||||
* [#22460](https://github.com/qbittorrent/qBittorrent/pull/22460)
 | 
			
		||||
  * `app/setPreferences` allows only one of `max_ratio_enabled`, `max_ratio` to be present
 | 
			
		||||
  * `app/setPreferences` allows only one of `max_seeding_time_enabled`, `max_seeding_time` to be present
 | 
			
		||||
  * `app/setPreferences` allows only one of `max_inactive_seeding_time_enabled`, `max_inactive_seeding_time` to be present
 | 
			
		||||
@@ -47,9 +47,6 @@ find_package(Boost ${minBoostVersion} REQUIRED)
 | 
			
		||||
find_package(OpenSSL ${minOpenSSLVersion} REQUIRED)
 | 
			
		||||
find_package(ZLIB ${minZlibVersion} REQUIRED)
 | 
			
		||||
find_package(Qt6 ${minQt6Version} REQUIRED COMPONENTS Core Network Sql Xml LinguistTools)
 | 
			
		||||
if (Qt6_FOUND AND (Qt6_VERSION VERSION_GREATER_EQUAL 6.10))
 | 
			
		||||
    find_package(Qt6 ${minQt6Version} REQUIRED COMPONENTS CorePrivate)
 | 
			
		||||
endif()
 | 
			
		||||
if (DBUS)
 | 
			
		||||
    find_package(Qt6 ${minQt6Version} REQUIRED COMPONENTS DBus)
 | 
			
		||||
    set_package_properties(Qt6DBus PROPERTIES
 | 
			
		||||
 
 | 
			
		||||
@@ -20,11 +20,10 @@ target_compile_features(qbt_common_cfg INTERFACE
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
target_compile_definitions(qbt_common_cfg INTERFACE
 | 
			
		||||
    QT_DISABLE_DEPRECATED_UP_TO=0x060600
 | 
			
		||||
    QT_DISABLE_DEPRECATED_UP_TO=0x060500
 | 
			
		||||
    QT_NO_CAST_FROM_ASCII
 | 
			
		||||
    QT_NO_CAST_TO_ASCII
 | 
			
		||||
    QT_NO_CAST_FROM_BYTEARRAY
 | 
			
		||||
    QT_NO_CONTEXTLESS_CONNECT
 | 
			
		||||
    QT_NO_NARROWING_CONVERSIONS_IN_CONNECT
 | 
			
		||||
    QT_USE_QSTRINGBUILDER
 | 
			
		||||
    QT_STRICT_ITERATORS
 | 
			
		||||
@@ -90,7 +89,7 @@ if (MSVC)
 | 
			
		||||
        /Zc:__cplusplus
 | 
			
		||||
    )
 | 
			
		||||
    target_link_options(qbt_common_cfg INTERFACE
 | 
			
		||||
        /GUARD:CF
 | 
			
		||||
        /guard:cf
 | 
			
		||||
        $<$<NOT:$<CONFIG:Debug>>:/OPT:REF /OPT:ICF>
 | 
			
		||||
        # suppress linking warning due to /INCREMENTAL and /OPT:ICF being both ON
 | 
			
		||||
        $<$<CONFIG:RelWithDebInfo>:/INCREMENTAL:NO>
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1
									
								
								dist/mac/AppIcon.icon/Assets/background.svg
									
									
									
									
										vendored
									
									
								
							
							
						
						| 
		 Before Width: | Height: | Size: 1.8 KiB  | 
							
								
								
									
										1
									
								
								dist/mac/AppIcon.icon/Assets/border.svg
									
									
									
									
										vendored
									
									
								
							
							
						
						| 
		 Before Width: | Height: | Size: 1.6 KiB  | 
							
								
								
									
										1
									
								
								dist/mac/AppIcon.icon/Assets/qb.svg
									
									
									
									
										vendored
									
									
								
							
							
						
						| 
		 Before Width: | Height: | Size: 2.7 KiB  | 
							
								
								
									
										70
									
								
								dist/mac/AppIcon.icon/icon.json
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -1,70 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "fill" : "automatic",
 | 
			
		||||
  "groups" : [
 | 
			
		||||
    {
 | 
			
		||||
      "blur-material" : null,
 | 
			
		||||
      "layers" : [
 | 
			
		||||
        {
 | 
			
		||||
          "hidden" : false,
 | 
			
		||||
          "image-name" : "qb.svg",
 | 
			
		||||
          "name" : "qb"
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "shadow" : {
 | 
			
		||||
        "kind" : "layer-color",
 | 
			
		||||
        "opacity" : 0.5
 | 
			
		||||
      },
 | 
			
		||||
      "specular" : true,
 | 
			
		||||
      "translucency" : {
 | 
			
		||||
        "enabled" : true,
 | 
			
		||||
        "value" : 0.5
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "hidden" : false,
 | 
			
		||||
      "layers" : [
 | 
			
		||||
        {
 | 
			
		||||
          "glass" : false,
 | 
			
		||||
          "image-name" : "border.svg",
 | 
			
		||||
          "name" : "border",
 | 
			
		||||
          "position" : {
 | 
			
		||||
            "scale" : 1.05,
 | 
			
		||||
            "translation-in-points" : [
 | 
			
		||||
              0,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "fill" : "automatic",
 | 
			
		||||
          "glass" : false,
 | 
			
		||||
          "image-name" : "background.svg",
 | 
			
		||||
          "name" : "background",
 | 
			
		||||
          "position" : {
 | 
			
		||||
            "scale" : 1.46,
 | 
			
		||||
            "translation-in-points" : [
 | 
			
		||||
              0,
 | 
			
		||||
              0
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "lighting" : "individual",
 | 
			
		||||
      "shadow" : {
 | 
			
		||||
        "kind" : "none",
 | 
			
		||||
        "opacity" : 0.5
 | 
			
		||||
      },
 | 
			
		||||
      "specular" : false,
 | 
			
		||||
      "translucency" : {
 | 
			
		||||
        "enabled" : false,
 | 
			
		||||
        "value" : 0.5
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "supported-platforms" : {
 | 
			
		||||
    "circles" : [
 | 
			
		||||
      "watchOS"
 | 
			
		||||
    ],
 | 
			
		||||
    "squares" : "shared"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										46
									
								
								dist/mac/Info.plist
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -32,30 +32,6 @@
 | 
			
		||||
			<key>LSIsAppleDefaultForType</key>
 | 
			
		||||
			<true/>
 | 
			
		||||
		</dict>
 | 
			
		||||
		<dict>
 | 
			
		||||
			<key>CFBundleTypeExtensions</key>
 | 
			
		||||
			<array>
 | 
			
		||||
				<string>!qB</string>
 | 
			
		||||
			</array>
 | 
			
		||||
			<key>CFBundleTypeIconFile</key>
 | 
			
		||||
			<string>qBitTorrentIncompleteData</string>
 | 
			
		||||
			<key>CFBundleTypeName</key>
 | 
			
		||||
			<string>qBitTorrent Incomplete Data</string>
 | 
			
		||||
			<key>CFBundleTypeRole</key>
 | 
			
		||||
			<string>Viewer</string>
 | 
			
		||||
			<key>LSHandlerRank</key>
 | 
			
		||||
			<string>Owner</string>
 | 
			
		||||
			<key>LSItemContentTypes</key>
 | 
			
		||||
			<array>
 | 
			
		||||
				<string>org.qbittorrent.qBittorrent.incompletedata</string>
 | 
			
		||||
			</array>
 | 
			
		||||
			<key>NSExportableTypes</key>
 | 
			
		||||
			<array>
 | 
			
		||||
				<string>org.qbittorrent.qBittorrent.incompletedata</string>
 | 
			
		||||
			</array>
 | 
			
		||||
			<key>LSIsAppleDefaultForType</key>
 | 
			
		||||
			<true/>
 | 
			
		||||
		</dict>
 | 
			
		||||
	</array>
 | 
			
		||||
	<key>CFBundleURLTypes</key>
 | 
			
		||||
	<array>
 | 
			
		||||
@@ -79,7 +55,7 @@
 | 
			
		||||
	<key>CFBundlePackageType</key>
 | 
			
		||||
	<string>APPL</string>
 | 
			
		||||
	<key>CFBundleShortVersionString</key>
 | 
			
		||||
	<string>5.2.0</string>
 | 
			
		||||
	<string>5.1.0</string>
 | 
			
		||||
	<key>CFBundleExecutable</key>
 | 
			
		||||
	<string>${EXECUTABLE_NAME}</string>
 | 
			
		||||
	<key>CFBundleIdentifier</key>
 | 
			
		||||
@@ -125,26 +101,6 @@
 | 
			
		||||
				</array>
 | 
			
		||||
			</dict>
 | 
			
		||||
		</dict>
 | 
			
		||||
		<dict>
 | 
			
		||||
			<key>UTTypeConformsTo</key>
 | 
			
		||||
			<array>
 | 
			
		||||
				<string>public.data</string>
 | 
			
		||||
				<string>public.item</string>
 | 
			
		||||
			</array>
 | 
			
		||||
			<key>UTTypeDescription</key>
 | 
			
		||||
			<string>qBitTorrent Incomplete Data</string>
 | 
			
		||||
			<key>UTTypeIconFile</key>
 | 
			
		||||
			<string>qBitTorrentIncompleteData</string>
 | 
			
		||||
			<key>UTTypeIdentifier</key>
 | 
			
		||||
			<string>org.qbittorrent.qBittorrent.incompletedata</string>
 | 
			
		||||
			<key>UTTypeTagSpecification</key>
 | 
			
		||||
			<dict>
 | 
			
		||||
				<key>public.filename-extension</key>
 | 
			
		||||
				<array>
 | 
			
		||||
					<string>!qB</string>
 | 
			
		||||
				</array>
 | 
			
		||||
			</dict>
 | 
			
		||||
		</dict>
 | 
			
		||||
	</array>
 | 
			
		||||
</dict>
 | 
			
		||||
</plist>
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								dist/mac/qBitTorrentDocument.icns
									
									
									
									
										vendored
									
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								dist/mac/qBitTorrentIncompleteData.icns
									
									
									
									
										vendored
									
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								dist/mac/qbittorrent_mac.icns
									
									
									
									
										vendored
									
									
								
							
							
						
						
							
								
								
									
										9
									
								
								dist/unix/CMakeLists.txt
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -34,12 +34,12 @@ endforeach()
 | 
			
		||||
 | 
			
		||||
if (GUI)
 | 
			
		||||
    install(FILES org.qbittorrent.qBittorrent.desktop
 | 
			
		||||
        DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/applications
 | 
			
		||||
        DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/applications/
 | 
			
		||||
        COMPONENT data
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    install(FILES org.qbittorrent.qBittorrent.metainfo.xml
 | 
			
		||||
        DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/metainfo
 | 
			
		||||
        DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/metainfo/
 | 
			
		||||
        COMPONENT data
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
@@ -55,9 +55,4 @@ if (GUI)
 | 
			
		||||
        DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/scalable/status
 | 
			
		||||
        COMPONENT data
 | 
			
		||||
    )
 | 
			
		||||
else()
 | 
			
		||||
    install(FILES org.qbittorrent.qBittorrent-nox.metainfo.xml
 | 
			
		||||
        DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/metainfo
 | 
			
		||||
        COMPONENT data
 | 
			
		||||
    )
 | 
			
		||||
endif()
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								dist/unix/menuicons/16x16/apps/qbittorrent.png
									
									
									
									
										vendored
									
									
								
							
							
						
						| 
		 Before Width: | Height: | Size: 747 B After Width: | Height: | Size: 750 B  | 
| 
		 Before Width: | Height: | Size: 747 B After Width: | Height: | Size: 750 B  | 
							
								
								
									
										
											BIN
										
									
								
								dist/unix/menuicons/192x192/apps/qbittorrent.png
									
									
									
									
										vendored
									
									
								
							
							
						
						| 
		 Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB  |