You've already forked qBittorrent
							
							
				mirror of
				https://github.com/qbittorrent/qBittorrent
				synced 2025-11-02 08:10:54 +01:00 
			
		
		
		
	Compare commits
	
		
			1 Commits
		
	
	
		
			v5_1_x
			...
			release-4.
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					e9ed621178 | 
							
								
								
									
										58
									
								
								.appveyor.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								.appveyor.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,58 @@
 | 
				
			|||||||
 | 
					version: '{branch}-{build}'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Do not build on tags (GitHub only)
 | 
				
			||||||
 | 
					skip_tags: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					image: Visual Studio 2017
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					branches:
 | 
				
			||||||
 | 
					  except:  # blacklist
 | 
				
			||||||
 | 
					    - coverity_scan
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					environment:
 | 
				
			||||||
 | 
					  REPO_DIR: &REPO_DIR c:\qbittorrent
 | 
				
			||||||
 | 
					  CACHE_DIR: &CACHE_DIR c:\qbt_cache
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  QBT_VER_URL: https://builds.shiki.hu/appveyor/version
 | 
				
			||||||
 | 
					  QBT_LIB_URL: https://builds.shiki.hu/appveyor/qbt_libraries.7z
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# project directory
 | 
				
			||||||
 | 
					clone_folder: *REPO_DIR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# cache size should < 100MB (after compressing with fastest option):
 | 
				
			||||||
 | 
					# see: https://www.appveyor.com/docs/build-cache#save-update-cache-before-build-finishes
 | 
				
			||||||
 | 
					cache:
 | 
				
			||||||
 | 
					  - *CACHE_DIR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					clone_depth: 50
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					install:
 | 
				
			||||||
 | 
					  # check if library needs update
 | 
				
			||||||
 | 
					  - appveyor DownloadFile "%QBT_VER_URL%" -FileName "c:\version_new" && SET /P newVersion=<"c:\version_new"
 | 
				
			||||||
 | 
					  - IF EXIST "%CACHE_DIR%\version" (SET /P oldVersion=<"%CACHE_DIR%\version")
 | 
				
			||||||
 | 
					  - IF NOT EXIST "%CACHE_DIR%\version" (SET updateCache=1)
 | 
				
			||||||
 | 
					  - IF NOT "%oldVersion%" == "%newVersion%" (SET updateCache=1)
 | 
				
			||||||
 | 
					  # update library
 | 
				
			||||||
 | 
					  - IF "%updateCache%" == "1" (ECHO "--- Will redownload libraries ---" &&
 | 
				
			||||||
 | 
					      RMDIR /S /Q "%CACHE_DIR%" & MKDIR "%CACHE_DIR%" &&
 | 
				
			||||||
 | 
					      appveyor DownloadFile "%QBT_LIB_URL%" -FileName "c:\qbt_lib.7z" && 7z x "c:\qbt_lib.7z" -o"%CACHE_DIR%" > nul &&
 | 
				
			||||||
 | 
					      COPY "c:\version_new" "%CACHE_DIR%\version")
 | 
				
			||||||
 | 
					  # Qt stay compressed in cache
 | 
				
			||||||
 | 
					  - 7z x "%CACHE_DIR%\qt5_32.7z" -o"c:\qbt" > nul
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					before_build:
 | 
				
			||||||
 | 
					  # setup env
 | 
				
			||||||
 | 
					  - CALL "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars32.bat"
 | 
				
			||||||
 | 
					  - SET PATH=%PATH%;c:\qbt\qt5_32\bin;%CACHE_DIR%\jom;
 | 
				
			||||||
 | 
					  # setup project
 | 
				
			||||||
 | 
					  - COPY /Y "%CACHE_DIR%\winconf.pri" "%REPO_DIR%"
 | 
				
			||||||
 | 
					  - COPY /Y "%CACHE_DIR%\winconf-msvc.pri" "%REPO_DIR%"
 | 
				
			||||||
 | 
					  # workarounds
 | 
				
			||||||
 | 
					  - MKLINK /J "c:\qbt\base" "%CACHE_DIR%\base"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					build_script:
 | 
				
			||||||
 | 
					  - cd "%REPO_DIR%"
 | 
				
			||||||
 | 
					  - qmake qbittorrent.pro && cd src && qmake src.pro
 | 
				
			||||||
 | 
					  - jom -j2 -f Makefile.Release
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					test: off
 | 
				
			||||||
							
								
								
									
										81
									
								
								.clang-tidy
									
									
									
									
									
								
							
							
						
						
									
										81
									
								
								.clang-tidy
									
									
									
									
									
								
							@@ -1,81 +0,0 @@
 | 
				
			|||||||
Checks: >
 | 
					 | 
				
			||||||
  bugprone-*,
 | 
					 | 
				
			||||||
  cert-*,
 | 
					 | 
				
			||||||
  concurrency-*,
 | 
					 | 
				
			||||||
  cppcoreguidelines-*,
 | 
					 | 
				
			||||||
  misc-*,
 | 
					 | 
				
			||||||
  modernize-*,
 | 
					 | 
				
			||||||
  performance-*,
 | 
					 | 
				
			||||||
  portability-*,
 | 
					 | 
				
			||||||
  readability-*,
 | 
					 | 
				
			||||||
  -# not applicable at all,
 | 
					 | 
				
			||||||
  -bugprone-easily-swappable-parameters,
 | 
					 | 
				
			||||||
  -bugprone-implicit-widening-of-multiplication-result,
 | 
					 | 
				
			||||||
  -bugprone-macro-parentheses,
 | 
					 | 
				
			||||||
  -cppcoreguidelines-avoid-c-arrays,
 | 
					 | 
				
			||||||
  -cppcoreguidelines-avoid-magic-numbers,
 | 
					 | 
				
			||||||
  -cppcoreguidelines-avoid-non-const-global-variables,
 | 
					 | 
				
			||||||
  -cppcoreguidelines-macro-usage,
 | 
					 | 
				
			||||||
  -cppcoreguidelines-non-private-member-variables-in-classes,
 | 
					 | 
				
			||||||
  -cppcoreguidelines-owning-memory,
 | 
					 | 
				
			||||||
  -cppcoreguidelines-pro-bounds-array-to-pointer-decay,
 | 
					 | 
				
			||||||
  -cppcoreguidelines-pro-bounds-constant-array-index,
 | 
					 | 
				
			||||||
  -cppcoreguidelines-pro-bounds-pointer-arithmetic,
 | 
					 | 
				
			||||||
  -cppcoreguidelines-pro-type-const-cast,
 | 
					 | 
				
			||||||
  -cppcoreguidelines-pro-type-reinterpret-cast,
 | 
					 | 
				
			||||||
  -cppcoreguidelines-pro-type-union-access,
 | 
					 | 
				
			||||||
  -cppcoreguidelines-pro-type-vararg,
 | 
					 | 
				
			||||||
  -cppcoreguidelines-special-member-functions,
 | 
					 | 
				
			||||||
  -cppcoreguidelines-virtual-class-destructor,
 | 
					 | 
				
			||||||
  -misc-no-recursion,
 | 
					 | 
				
			||||||
  -misc-non-private-member-variables-in-classes,
 | 
					 | 
				
			||||||
  -misc-unused-parameters,
 | 
					 | 
				
			||||||
  -modernize-avoid-c-arrays,
 | 
					 | 
				
			||||||
  -modernize-pass-by-value,
 | 
					 | 
				
			||||||
  -modernize-use-auto,
 | 
					 | 
				
			||||||
  -modernize-use-nodiscard,
 | 
					 | 
				
			||||||
  -modernize-use-trailing-return-type,
 | 
					 | 
				
			||||||
  -readability-function-cognitive-complexity,
 | 
					 | 
				
			||||||
  -readability-function-size,
 | 
					 | 
				
			||||||
  -readability-identifier-length,
 | 
					 | 
				
			||||||
  -readability-implicit-bool-conversion,
 | 
					 | 
				
			||||||
  -readability-isolate-declaration,
 | 
					 | 
				
			||||||
  -readability-magic-numbers,
 | 
					 | 
				
			||||||
  -readability-named-parameter,
 | 
					 | 
				
			||||||
  -readability-redundant-access-specifiers,
 | 
					 | 
				
			||||||
  -readability-simplify-boolean-expr,
 | 
					 | 
				
			||||||
  -readability-uppercase-literal-suffix,
 | 
					 | 
				
			||||||
  -# only sometimes useful,
 | 
					 | 
				
			||||||
  -bugprone-narrowing-conversions,
 | 
					 | 
				
			||||||
  -cert-dcl58-cpp,
 | 
					 | 
				
			||||||
  -cert-err33-c,
 | 
					 | 
				
			||||||
  -cert-err58-cpp,
 | 
					 | 
				
			||||||
  -clang-analyzer-core.CallAndMessage,
 | 
					 | 
				
			||||||
  -clang-analyzer-cplusplus.NewDelete,
 | 
					 | 
				
			||||||
  -clang-analyzer-cplusplus.NewDeleteLeaks,
 | 
					 | 
				
			||||||
  -concurrency-mt-unsafe,
 | 
					 | 
				
			||||||
  -cppcoreguidelines-init-variables,
 | 
					 | 
				
			||||||
  -cppcoreguidelines-narrowing-conversions,
 | 
					 | 
				
			||||||
  -cppcoreguidelines-prefer-member-initializer,
 | 
					 | 
				
			||||||
  -cppcoreguidelines-pro-type-static-cast-downcast,
 | 
					 | 
				
			||||||
  -misc-definitions-in-headers,
 | 
					 | 
				
			||||||
  -modernize-concat-nested-namespaces,
 | 
					 | 
				
			||||||
  -modernize-loop-convert,
 | 
					 | 
				
			||||||
  -modernize-raw-string-literal,
 | 
					 | 
				
			||||||
  -modernize-unary-static-assert,
 | 
					 | 
				
			||||||
  -performance-no-automatic-move,
 | 
					 | 
				
			||||||
  -readability-convert-member-functions-to-static,
 | 
					 | 
				
			||||||
  -readability-else-after-return,
 | 
					 | 
				
			||||||
  -readability-redundant-declaration,
 | 
					 | 
				
			||||||
  -# obsoleted,
 | 
					 | 
				
			||||||
  -cert-dcl21-cpp
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
CheckOptions:
 | 
					 | 
				
			||||||
  - { key: cppcoreguidelines-explicit-virtual-functions.IgnoreDestructors, value: true }
 | 
					 | 
				
			||||||
  - { key: modernize-use-override.IgnoreDestructors, value: true }
 | 
					 | 
				
			||||||
  - { key: performance-for-range-copy.AllowedTypes, value: "QJsonValue" }
 | 
					 | 
				
			||||||
  - { key: performance-for-range-copy.WarnOnAllAutoCopies, value: true }
 | 
					 | 
				
			||||||
  - { key: readability-braces-around-statements.ShortStatementLines, value: 3 }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
HeaderFilterRegex: ".+/src/.*\\.h"
 | 
					 | 
				
			||||||
WarningsAsErrors: "*"
 | 
					 | 
				
			||||||
@@ -1,10 +1,8 @@
 | 
				
			|||||||
# EditorConfig is awesome: https://EditorConfig.org
 | 
					# EditorConfig is awesome: http://EditorConfig.org
 | 
				
			||||||
 | 
					
 | 
				
			||||||
root = true
 | 
					root = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[*]
 | 
					[*]
 | 
				
			||||||
charset = utf-8
 | 
					 | 
				
			||||||
end_of_line = lf
 | 
					 | 
				
			||||||
indent_style = space
 | 
					indent_style = space
 | 
				
			||||||
indent_size = 4
 | 
					indent_size = 4
 | 
				
			||||||
insert_final_newline = true
 | 
					insert_final_newline = true
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										11
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										11
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
								
							@@ -1,10 +1,7 @@
 | 
				
			|||||||
core.eol=lf
 | 
					core.eol=lf
 | 
				
			||||||
* text eol=lf
 | 
					* text eol=lf
 | 
				
			||||||
*.icns binary
 | 
					 | 
				
			||||||
*.ico binary
 | 
					 | 
				
			||||||
*.png binary
 | 
					 | 
				
			||||||
*.qm binary
 | 
					 | 
				
			||||||
*.zip binary
 | 
					*.zip binary
 | 
				
			||||||
 | 
					*.png binary
 | 
				
			||||||
dist/windows/license.txt text eol=crlf
 | 
					*.ico binary
 | 
				
			||||||
test/testdata/crlf.txt text eol=crlf
 | 
					*.qm binary
 | 
				
			||||||
 | 
					*.icns binary
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										1
									
								
								.github/FUNDING.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.github/FUNDING.yml
									
									
									
									
										vendored
									
									
								
							@@ -1 +0,0 @@
 | 
				
			|||||||
custom: "https://www.qbittorrent.org/donate.php"
 | 
					 | 
				
			||||||
							
								
								
									
										20
									
								
								.github/ISSUE_TEMPLATE.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								.github/ISSUE_TEMPLATE.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
				
			|||||||
 | 
					**Please provide the following information**
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### qBittorrent version and Operating System
 | 
				
			||||||
 | 
					(type here)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### If on linux, libtorrent and Qt version
 | 
				
			||||||
 | 
					(type here)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### What is the problem
 | 
				
			||||||
 | 
					(type here)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### What is the expected behavior
 | 
				
			||||||
 | 
					(type here)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Steps to reproduce
 | 
				
			||||||
 | 
					(type here)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Extra info(if any)
 | 
				
			||||||
 | 
					(type here)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										74
									
								
								.github/ISSUE_TEMPLATE/bug_report.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										74
									
								
								.github/ISSUE_TEMPLATE/bug_report.yml
									
									
									
									
										vendored
									
									
								
							@@ -1,74 +0,0 @@
 | 
				
			|||||||
name: Bug Report
 | 
					 | 
				
			||||||
description: File a bug report to help improve qBittorrent user experience.
 | 
					 | 
				
			||||||
body:
 | 
					 | 
				
			||||||
  - type: markdown
 | 
					 | 
				
			||||||
    attributes:
 | 
					 | 
				
			||||||
      value: |
 | 
					 | 
				
			||||||
        #### ADVISORY
 | 
					 | 
				
			||||||
        "We do not support any versions older than the current release series"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        "We do not support any 3rd party/forked versions e.g. `portableapps`/`Enhanced Edition` etc."
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        "Please post all details in **English**."
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        #### Prerequisites before submitting an issue!
 | 
					 | 
				
			||||||
        - Read the issue reporting section in the **[contributing guidelines](https://github.com/qbittorrent/qBittorrent/blob/master/CONTRIBUTING.md)**, to know how to submit a good bug report with the required information.
 | 
					 | 
				
			||||||
        - Verify that the issue is not fixed and is reproducible in the **[latest official qBittorrent version](https://www.qbittorrent.org/download.php).**
 | 
					 | 
				
			||||||
        - (Optional, but recommended) Verify that the issue is not fixed and is reproducible in the latest CI (**[macOS](https://github.com/qbittorrent/qBittorrent/actions/workflows/ci_macos.yaml?query=branch%3Amaster+event%3Apush)** / **[Ubuntu](https://github.com/qbittorrent/qBittorrent/actions/workflows/ci_ubuntu.yaml?query=branch%3Amaster+event%3Apush)** / **[Windows](https://github.com/qbittorrent/qBittorrent/actions/workflows/ci_windows.yaml?query=branch%3Amaster+event%3Apush)**) builds.
 | 
					 | 
				
			||||||
        - Perform a **[search of the issue tracker (including closed ones)](https://github.com/qbittorrent/qBittorrent/issues?q=is%3Aissue+is%3Aopen+-label%3A%22Feature+request%22)** to avoid posting a duplicate.
 | 
					 | 
				
			||||||
        - Make sure this is not a support request or question, both of which are better suited for either the **[discussions section](https://github.com/qbittorrent/qBittorrent/discussions)**, **[forum](https://qbforums.shiki.hu/)**, or **[subreddit](https://www.reddit.com/r/qBittorrent/)**.
 | 
					 | 
				
			||||||
        - Verify that the **[wiki](https://github.com/qbittorrent/qBittorrent/wiki)** did not contain a suitable solution either.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  - type: textarea
 | 
					 | 
				
			||||||
    attributes:
 | 
					 | 
				
			||||||
      label: qBittorrent & operating system versions
 | 
					 | 
				
			||||||
      description: |
 | 
					 | 
				
			||||||
        Qt and libtorrent-rasterbar versions are required when: 1. You are using linux. 2. You are not using an official build downloaded from our website.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        Example of preferred formatting:
 | 
					 | 
				
			||||||
        qBittorrent: 4.6.6 x64
 | 
					 | 
				
			||||||
        Operating system: Windows 10 Pro x64 (22H2) 10.0.19045
 | 
					 | 
				
			||||||
        Qt: 6.4.3
 | 
					 | 
				
			||||||
        libtorrent-rasterbar: 1.2.19
 | 
					 | 
				
			||||||
      placeholder: |
 | 
					 | 
				
			||||||
        qBittorrent:
 | 
					 | 
				
			||||||
        Operating system:
 | 
					 | 
				
			||||||
        Qt:
 | 
					 | 
				
			||||||
        libtorrent-rasterbar:
 | 
					 | 
				
			||||||
    validations:
 | 
					 | 
				
			||||||
      required: true
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  - type: textarea
 | 
					 | 
				
			||||||
    attributes:
 | 
					 | 
				
			||||||
      label: What is the problem?
 | 
					 | 
				
			||||||
      description: Please add the "crash report" (if encountered) or give a clear and concise description of problem.
 | 
					 | 
				
			||||||
    validations:
 | 
					 | 
				
			||||||
      required: true
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  - type: textarea
 | 
					 | 
				
			||||||
    attributes:
 | 
					 | 
				
			||||||
      label: Steps to reproduce
 | 
					 | 
				
			||||||
      description: Please provide reliable steps to reproduce the problem.
 | 
					 | 
				
			||||||
      placeholder: |
 | 
					 | 
				
			||||||
        1. First step
 | 
					 | 
				
			||||||
        2. Second step
 | 
					 | 
				
			||||||
        3. and so on...
 | 
					 | 
				
			||||||
    validations:
 | 
					 | 
				
			||||||
      required: false
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  - type: textarea
 | 
					 | 
				
			||||||
    attributes:
 | 
					 | 
				
			||||||
      label: Additional context
 | 
					 | 
				
			||||||
      description: Add screenshots etc. (Anything that will provide more context about the problem)
 | 
					 | 
				
			||||||
    validations:
 | 
					 | 
				
			||||||
      required: false
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  - type: textarea
 | 
					 | 
				
			||||||
    attributes:
 | 
					 | 
				
			||||||
      label: Log(s) & preferences file(s)
 | 
					 | 
				
			||||||
      description: |
 | 
					 | 
				
			||||||
        Add these files: qBittorrent preferences file, qBittorrent.log & watched_folders.json (if using "Watched Folders" feature).
 | 
					 | 
				
			||||||
        See **[Where does qBittorrent save its settings?](https://github.com/qbittorrent/qBittorrent/wiki/Frequently-Asked-Questions#Where_does_qBittorrent_save_its_settings)**
 | 
					 | 
				
			||||||
        #### Note: It's the user's responsibility to redact any sensitive information
 | 
					 | 
				
			||||||
    validations:
 | 
					 | 
				
			||||||
      required: true
 | 
					 | 
				
			||||||
							
								
								
									
										17
									
								
								.github/ISSUE_TEMPLATE/config.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										17
									
								
								.github/ISSUE_TEMPLATE/config.yml
									
									
									
									
										vendored
									
									
								
							@@ -1,17 +0,0 @@
 | 
				
			|||||||
blank_issues_enabled: false
 | 
					 | 
				
			||||||
contact_links:
 | 
					 | 
				
			||||||
  - name: Wiki
 | 
					 | 
				
			||||||
    url: "https://github.com/qbittorrent/qBittorrent/wiki/"
 | 
					 | 
				
			||||||
    about: "Consult the wiki first (especially the FAQ), it might already contain the information you are looking for"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  - name: Question
 | 
					 | 
				
			||||||
    url: "https://github.com/qbittorrent/qBittorrent/discussions"
 | 
					 | 
				
			||||||
    about: "Please ask questions related to usage/setup/support/non-issue development discussion in the Discussions section"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  - name: Question
 | 
					 | 
				
			||||||
    url: "http://forum.qbittorrent.org/"
 | 
					 | 
				
			||||||
    about: "Alternatively, ask on the official forum"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  - name: Question
 | 
					 | 
				
			||||||
    url: "https://www.reddit.com/r/qBittorrent/"
 | 
					 | 
				
			||||||
    about: "Alternatively, use the subreddit"
 | 
					 | 
				
			||||||
							
								
								
									
										37
									
								
								.github/ISSUE_TEMPLATE/feature_request.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										37
									
								
								.github/ISSUE_TEMPLATE/feature_request.yml
									
									
									
									
										vendored
									
									
								
							@@ -1,37 +0,0 @@
 | 
				
			|||||||
name: Feature Request
 | 
					 | 
				
			||||||
description: Suggest a new feature or enhancement for qBittorrent.
 | 
					 | 
				
			||||||
labels: ["Feature request"]
 | 
					 | 
				
			||||||
body:
 | 
					 | 
				
			||||||
  - type: markdown
 | 
					 | 
				
			||||||
    attributes:
 | 
					 | 
				
			||||||
      value: |
 | 
					 | 
				
			||||||
        #### ADVISORY
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        "Please post all details in **English**."
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        #### Prerequisites before submitting a feature request!
 | 
					 | 
				
			||||||
        - Read the feature request section in the **[contributing guidelines](https://github.com/qbittorrent/qBittorrent/blob/master/CONTRIBUTING.md)**, to know how to submit a good feature request with the required information.
 | 
					 | 
				
			||||||
        - Verify that the feature being requested is not available in the **[latest official qBittorrent version](https://www.qbittorrent.org/download.php).**
 | 
					 | 
				
			||||||
        - (Optional but recommended) Verify that the feature being requested is not available in the latest CI (**[macOS](https://github.com/qbittorrent/qBittorrent/actions/workflows/ci_macos.yaml?query=branch%3Amaster+event%3Apush)** / **[Ubuntu](https://github.com/qbittorrent/qBittorrent/actions/workflows/ci_ubuntu.yaml?query=branch%3Amaster+event%3Apush)** / **[Windows](https://github.com/qbittorrent/qBittorrent/actions/workflows/ci_windows.yaml?query=branch%3Amaster+event%3Apush)**) builds.
 | 
					 | 
				
			||||||
        - Search the issue tracker with the **[feature request filter](https://github.com/qbittorrent/qBittorrent/issues?q=is%3Aopen+is%3Aissue+label%3A%22Feature+request%22)** for similar feature requests (including closed ones) to avoid posting a duplicate.
 | 
					 | 
				
			||||||
        - Make sure this is not a support request or question, both of which are better suited for either the **[discussions section](https://github.com/qbittorrent/qBittorrent/discussions)**, **[forum](https://qbforums.shiki.hu/)**, or **[subreddit](https://www.reddit.com/r/qBittorrent/)**.
 | 
					 | 
				
			||||||
        - Verify that the **[wiki](https://github.com/qbittorrent/qBittorrent/wiki)** did not contain a suitable solution either.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  - type: textarea
 | 
					 | 
				
			||||||
    attributes:
 | 
					 | 
				
			||||||
      label: Suggestion
 | 
					 | 
				
			||||||
    validations:
 | 
					 | 
				
			||||||
      required: false
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  - type: textarea
 | 
					 | 
				
			||||||
    attributes:
 | 
					 | 
				
			||||||
      label: Use case
 | 
					 | 
				
			||||||
    validations:
 | 
					 | 
				
			||||||
      required: false
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  - type: textarea
 | 
					 | 
				
			||||||
    attributes:
 | 
					 | 
				
			||||||
      label: Extra info/examples/attachments
 | 
					 | 
				
			||||||
      description: Add screenshots etc. (Anything that will give us more context about what is being requested!)
 | 
					 | 
				
			||||||
    validations:
 | 
					 | 
				
			||||||
      required: false
 | 
					 | 
				
			||||||
							
								
								
									
										5
									
								
								.github/PULL_REQUEST_TEMPLATE.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								.github/PULL_REQUEST_TEMPLATE.md
									
									
									
									
										vendored
									
									
								
							@@ -1,5 +0,0 @@
 | 
				
			|||||||
<!--
 | 
					 | 
				
			||||||
MANDATORY Before submitting your work, make sure you have:
 | 
					 | 
				
			||||||
1. Read https://github.com/qbittorrent/qBittorrent/blob/master/CONTRIBUTING.md#opening-a-pull-request
 | 
					 | 
				
			||||||
2. Delete this comment block
 | 
					 | 
				
			||||||
-->
 | 
					 | 
				
			||||||
							
								
								
									
										18
									
								
								.github/SUPPORT.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										18
									
								
								.github/SUPPORT.md
									
									
									
									
										vendored
									
									
								
							@@ -1,18 +0,0 @@
 | 
				
			|||||||
# Support Resources
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
The issue tracker is only for bug reports/feature requests related to the project itself.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Please do not use the issue tracker for questions about general program usage,
 | 
					 | 
				
			||||||
how BitTorrent (the protocol) works in general, etc.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
For such questions, use one of the following community support resources:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* The [discussions section][discussions-url]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* The [official forum][forum-url]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* The [qBittorrent subreddit][subreddit-url]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[discussions-url]: https://github.com/qbittorrent/qBittorrent/discussions
 | 
					 | 
				
			||||||
[forum-url]: http://forum.qbittorrent.org/
 | 
					 | 
				
			||||||
[subreddit-url]: https://www.reddit.com/r/qBittorrent/
 | 
					 | 
				
			||||||
							
								
								
									
										15
									
								
								.github/dependabot.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										15
									
								
								.github/dependabot.yml
									
									
									
									
										vendored
									
									
								
							@@ -1,15 +0,0 @@
 | 
				
			|||||||
version: 2
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
updates:
 | 
					 | 
				
			||||||
  - package-ecosystem: "github-actions"
 | 
					 | 
				
			||||||
    directory: "/"
 | 
					 | 
				
			||||||
    commit-message:
 | 
					 | 
				
			||||||
      prefix: "GHA CI"
 | 
					 | 
				
			||||||
    groups:
 | 
					 | 
				
			||||||
      github-actions:
 | 
					 | 
				
			||||||
        patterns:
 | 
					 | 
				
			||||||
          - "*"
 | 
					 | 
				
			||||||
    labels:
 | 
					 | 
				
			||||||
      - "CI"
 | 
					 | 
				
			||||||
    schedule:
 | 
					 | 
				
			||||||
      interval: "monthly"
 | 
					 | 
				
			||||||
							
								
								
									
										71
									
								
								.github/workflows/ci_file_health.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										71
									
								
								.github/workflows/ci_file_health.yaml
									
									
									
									
										vendored
									
									
								
							@@ -1,71 +0,0 @@
 | 
				
			|||||||
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 != '' }}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
jobs:
 | 
					 | 
				
			||||||
  ci:
 | 
					 | 
				
			||||||
    name: Check
 | 
					 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					 | 
				
			||||||
    permissions:
 | 
					 | 
				
			||||||
      security-events: write
 | 
					 | 
				
			||||||
    steps:
 | 
					 | 
				
			||||||
      - name: Checkout repository
 | 
					 | 
				
			||||||
        uses: actions/checkout@v4
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          persist-credentials: false
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Setup python
 | 
					 | 
				
			||||||
        uses: actions/setup-python@v5
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          python-version: "*"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Check files
 | 
					 | 
				
			||||||
        uses: pre-commit/action@v3.0.1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Check doc
 | 
					 | 
				
			||||||
        env:
 | 
					 | 
				
			||||||
          pandoc_path: "${{ github.workspace }}/../pandoc"
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          # install pandoc
 | 
					 | 
				
			||||||
          curl \
 | 
					 | 
				
			||||||
            -L \
 | 
					 | 
				
			||||||
            -o "${{ runner.temp }}/pandoc.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
 | 
					 | 
				
			||||||
          for lang in doc/*/; do
 | 
					 | 
				
			||||||
            "${{ env.pandoc_path }}/bin/pandoc" -f markdown -t man -s "$lang/qbittorrent.1.md" -o "$lang/qbittorrent.1"
 | 
					 | 
				
			||||||
            "${{ env.pandoc_path }}/bin/pandoc" -f markdown -t man -s "$lang/qbittorrent-nox.1.md" -o "$lang/qbittorrent-nox.1"
 | 
					 | 
				
			||||||
          done
 | 
					 | 
				
			||||||
          # check diff, ignore "Automatically generated by ..." part
 | 
					 | 
				
			||||||
          git diff -I '\.\\".*' --exit-code
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Check GitHub Actions workflow
 | 
					 | 
				
			||||||
        env:
 | 
					 | 
				
			||||||
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          pip install zizmor
 | 
					 | 
				
			||||||
          IGNORE_RULEID='(.ruleId != "template-injection")
 | 
					 | 
				
			||||||
            and (.ruleId != "unpinned-uses")'
 | 
					 | 
				
			||||||
          IGNORE_ID='(.id != "template-injection")
 | 
					 | 
				
			||||||
            and (.id != "unpinned-uses")'
 | 
					 | 
				
			||||||
          zizmor \
 | 
					 | 
				
			||||||
            --format sarif \
 | 
					 | 
				
			||||||
            --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@v3
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          category: zizmor
 | 
					 | 
				
			||||||
          sarif_file: "${{ runner.temp }}/zizmor_results.sarif"
 | 
					 | 
				
			||||||
							
								
								
									
										152
									
								
								.github/workflows/ci_macos.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										152
									
								
								.github/workflows/ci_macos.yaml
									
									
									
									
										vendored
									
									
								
							@@ -1,152 +0,0 @@
 | 
				
			|||||||
name: CI - macOS
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
on: [pull_request, push]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
permissions: {}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
concurrency:
 | 
					 | 
				
			||||||
  group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
 | 
					 | 
				
			||||||
  cancel-in-progress: ${{ github.head_ref != '' }}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
jobs:
 | 
					 | 
				
			||||||
  ci:
 | 
					 | 
				
			||||||
    name: Build
 | 
					 | 
				
			||||||
    runs-on: macos-latest
 | 
					 | 
				
			||||||
    permissions:
 | 
					 | 
				
			||||||
      actions: write
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    strategy:
 | 
					 | 
				
			||||||
      fail-fast: false
 | 
					 | 
				
			||||||
      matrix:
 | 
					 | 
				
			||||||
        libt_version: ["2.0.11", "1.2.20"]
 | 
					 | 
				
			||||||
        qbt_gui: ["GUI=ON", "GUI=OFF"]
 | 
					 | 
				
			||||||
        qt_version: ["6.7.0"]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    env:
 | 
					 | 
				
			||||||
      boost_path: "${{ github.workspace }}/../boost"
 | 
					 | 
				
			||||||
      libtorrent_path: "${{ github.workspace }}/../libtorrent"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    steps:
 | 
					 | 
				
			||||||
      - name: Checkout repository
 | 
					 | 
				
			||||||
        uses: actions/checkout@v4
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          persist-credentials: false
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Install dependencies
 | 
					 | 
				
			||||||
        uses: Wandalen/wretry.action@v3
 | 
					 | 
				
			||||||
        env:
 | 
					 | 
				
			||||||
           HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK: 1
 | 
					 | 
				
			||||||
           HOMEBREW_NO_INSTALL_CLEANUP: 1
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          attempt_delay: 20000
 | 
					 | 
				
			||||||
          attempt_limit: 6
 | 
					 | 
				
			||||||
          command: |
 | 
					 | 
				
			||||||
            brew update > /dev/null
 | 
					 | 
				
			||||||
            brew install \
 | 
					 | 
				
			||||||
              cmake ninja \
 | 
					 | 
				
			||||||
              openssl@3 zlib
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Setup ccache
 | 
					 | 
				
			||||||
        uses: Chocobo1/setup-ccache-action@v1
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          store_cache: ${{ github.ref == 'refs/heads/master' }}
 | 
					 | 
				
			||||||
          update_packager_index: false
 | 
					 | 
				
			||||||
          ccache_options: |
 | 
					 | 
				
			||||||
            max_size=2G
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Install boost
 | 
					 | 
				
			||||||
        env:
 | 
					 | 
				
			||||||
          BOOST_MAJOR_VERSION: "1"
 | 
					 | 
				
			||||||
          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"
 | 
					 | 
				
			||||||
          boost_url2="https://sourceforge.net/projects/boost/files/boost/${{ env.BOOST_MAJOR_VERSION }}.${{ env.BOOST_MINOR_VERSION }}.${{ env.BOOST_PATCH_VERSION }}/boost_${{ env.BOOST_MAJOR_VERSION }}_${{ env.BOOST_MINOR_VERSION }}_${{ env.BOOST_PATCH_VERSION }}.tar.gz"
 | 
					 | 
				
			||||||
          set +e
 | 
					 | 
				
			||||||
          curl -L -o "${{ runner.temp }}/boost.tar.gz" "$boost_url"
 | 
					 | 
				
			||||||
          tar -xf "${{ runner.temp }}/boost.tar.gz" -C "${{ github.workspace }}/.."; _exitCode="$?"
 | 
					 | 
				
			||||||
          if [ "$_exitCode" -ne "0" ]; then
 | 
					 | 
				
			||||||
            curl -L -o "${{ runner.temp }}/boost.tar.gz" "$boost_url2"
 | 
					 | 
				
			||||||
            tar -xf "${{ runner.temp }}/boost.tar.gz" -C "${{ github.workspace }}/.."; _exitCode="$?"
 | 
					 | 
				
			||||||
          fi
 | 
					 | 
				
			||||||
          mv "${{ github.workspace }}/.."/boost_* "${{ env.boost_path }}"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Install Qt
 | 
					 | 
				
			||||||
        uses: jurplel/install-qt-action@v4
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          version: ${{ matrix.qt_version }}
 | 
					 | 
				
			||||||
          archives: qtbase qtdeclarative qtsvg qttools
 | 
					 | 
				
			||||||
          # Not sure why Qt made a hard dependency on qtdeclarative, try removing it when Qt > 6.4.0
 | 
					 | 
				
			||||||
          cache: true
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Install libtorrent
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          git clone \
 | 
					 | 
				
			||||||
            --branch v${{ matrix.libt_version }} \
 | 
					 | 
				
			||||||
            --depth 1 \
 | 
					 | 
				
			||||||
            --recurse-submodules \
 | 
					 | 
				
			||||||
            https://github.com/arvidn/libtorrent.git \
 | 
					 | 
				
			||||||
            ${{ env.libtorrent_path }}
 | 
					 | 
				
			||||||
          cd ${{ env.libtorrent_path }}
 | 
					 | 
				
			||||||
          cmake \
 | 
					 | 
				
			||||||
            -B build \
 | 
					 | 
				
			||||||
            -G "Ninja" \
 | 
					 | 
				
			||||||
            -DBUILD_SHARED_LIBS=OFF \
 | 
					 | 
				
			||||||
            -DCMAKE_BUILD_TYPE=RelWithDebInfo \
 | 
					 | 
				
			||||||
            -DCMAKE_CXX_STANDARD=20 \
 | 
					 | 
				
			||||||
            -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
 | 
					 | 
				
			||||||
            -DBOOST_ROOT="${{ env.boost_path }}" \
 | 
					 | 
				
			||||||
            -Ddeprecated-functions=OFF
 | 
					 | 
				
			||||||
          cmake --build build
 | 
					 | 
				
			||||||
          sudo cmake --install build
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Build qBittorrent
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          CXXFLAGS="$CXXFLAGS -DQT_FORCE_ASSERTS -Werror -Wno-error=deprecated-declarations" \
 | 
					 | 
				
			||||||
          LDFLAGS="$LDFLAGS -gz" \
 | 
					 | 
				
			||||||
          cmake \
 | 
					 | 
				
			||||||
            -B build \
 | 
					 | 
				
			||||||
            -G "Ninja" \
 | 
					 | 
				
			||||||
            -DCMAKE_BUILD_TYPE=RelWithDebInfo \
 | 
					 | 
				
			||||||
            -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
 | 
					 | 
				
			||||||
            -DBOOST_ROOT="${{ env.boost_path }}" \
 | 
					 | 
				
			||||||
            -DTESTING=ON \
 | 
					 | 
				
			||||||
            -DVERBOSE_CONFIGURE=ON \
 | 
					 | 
				
			||||||
            -D${{ matrix.qbt_gui }}
 | 
					 | 
				
			||||||
          cmake --build build --target qbt_update_translations
 | 
					 | 
				
			||||||
          cmake --build build
 | 
					 | 
				
			||||||
          cmake --build build --target check
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Prepare build artifacts
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          # create .dmg
 | 
					 | 
				
			||||||
          appName="qbittorrent"
 | 
					 | 
				
			||||||
          if [ "${{ matrix.qbt_gui }}" = "GUI=OFF" ]; then
 | 
					 | 
				
			||||||
            appName="qbittorrent-nox"
 | 
					 | 
				
			||||||
          fi
 | 
					 | 
				
			||||||
          # package
 | 
					 | 
				
			||||||
          pushd build
 | 
					 | 
				
			||||||
          PACKAGE_RETRY=0
 | 
					 | 
				
			||||||
          while [ "$PACKAGE_RETRY" -lt "3" ]; do
 | 
					 | 
				
			||||||
            macdeployqt "$appName.app" -dmg -no-strip
 | 
					 | 
				
			||||||
            if [ -f "$appName.dmg" ]; then
 | 
					 | 
				
			||||||
              break
 | 
					 | 
				
			||||||
            fi
 | 
					 | 
				
			||||||
            sleep 5
 | 
					 | 
				
			||||||
            PACKAGE_RETRY=$((PACKAGE_RETRY + 1))
 | 
					 | 
				
			||||||
            echo "Retry $PACKAGE_RETRY..."
 | 
					 | 
				
			||||||
          done
 | 
					 | 
				
			||||||
          popd
 | 
					 | 
				
			||||||
          # prepare upload folder
 | 
					 | 
				
			||||||
          mkdir upload
 | 
					 | 
				
			||||||
          cp "build/$appName.dmg" upload
 | 
					 | 
				
			||||||
          mkdir upload/cmake
 | 
					 | 
				
			||||||
          cp build/compile_commands.json upload/cmake
 | 
					 | 
				
			||||||
          mkdir upload/cmake/libtorrent
 | 
					 | 
				
			||||||
          cp ${{ env.libtorrent_path }}/build/compile_commands.json upload/cmake/libtorrent
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Upload build artifacts
 | 
					 | 
				
			||||||
        uses: actions/upload-artifact@v4
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          name: qBittorrent-CI_macOS_${{ matrix.qbt_gui }}_libtorrent-${{ matrix.libt_version }}_Qt-${{ matrix.qt_version }}
 | 
					 | 
				
			||||||
          path: upload
 | 
					 | 
				
			||||||
							
								
								
									
										91
									
								
								.github/workflows/ci_python.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										91
									
								
								.github/workflows/ci_python.yaml
									
									
									
									
										vendored
									
									
								
							@@ -1,91 +0,0 @@
 | 
				
			|||||||
name: CI - Python
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
on: [pull_request, push]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
permissions: {}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
concurrency:
 | 
					 | 
				
			||||||
  group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
 | 
					 | 
				
			||||||
  cancel-in-progress: ${{ github.head_ref != '' }}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
jobs:
 | 
					 | 
				
			||||||
  ci:
 | 
					 | 
				
			||||||
    name: Check
 | 
					 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    steps:
 | 
					 | 
				
			||||||
      - name: Checkout repository
 | 
					 | 
				
			||||||
        uses: actions/checkout@v4
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          persist-credentials: false
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Setup python (auxiliary scripts)
 | 
					 | 
				
			||||||
        uses: actions/setup-python@v5
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          python-version: '3'  # use default version
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Install tools (auxiliary scripts)
 | 
					 | 
				
			||||||
        run: pip install bandit pycodestyle pyflakes
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Gather files (auxiliary scripts)
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          export "PY_FILES=$(find . -type f -name '*.py' ! -path '*searchengine*' -printf '%p ')"
 | 
					 | 
				
			||||||
          echo $PY_FILES
 | 
					 | 
				
			||||||
          echo "PY_FILES=$PY_FILES" >> "$GITHUB_ENV"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Lint code (auxiliary scripts)
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          pyflakes $PY_FILES
 | 
					 | 
				
			||||||
          bandit --skip B101,B314,B405 $PY_FILES
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Format code (auxiliary scripts)
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          pycodestyle \
 | 
					 | 
				
			||||||
            --max-line-length=1000 \
 | 
					 | 
				
			||||||
            --statistics \
 | 
					 | 
				
			||||||
            $PY_FILES
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Build code (auxiliary scripts)
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          python -m compileall $PY_FILES
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Setup python (search engine)
 | 
					 | 
				
			||||||
        uses: actions/setup-python@v5
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          python-version: '3.9'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Install tools (search engine)
 | 
					 | 
				
			||||||
        run: pip install bandit mypy pycodestyle pyflakes pyright
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Gather files (search engine)
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          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)
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          MYPYPATH="src/searchengine/nova3" \
 | 
					 | 
				
			||||||
          mypy \
 | 
					 | 
				
			||||||
            --follow-imports skip \
 | 
					 | 
				
			||||||
            --strict \
 | 
					 | 
				
			||||||
            $PY_FILES
 | 
					 | 
				
			||||||
          pyright \
 | 
					 | 
				
			||||||
            $PY_FILES
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Lint code (search engine)
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          pyflakes $PY_FILES
 | 
					 | 
				
			||||||
          bandit --skip B110,B310,B314,B405 $PY_FILES
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Format code (search engine)
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          pycodestyle \
 | 
					 | 
				
			||||||
            --ignore=E265,E402 \
 | 
					 | 
				
			||||||
            --max-line-length=1000 \
 | 
					 | 
				
			||||||
            --statistics \
 | 
					 | 
				
			||||||
            $PY_FILES
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Build code (search engine)
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          python -m compileall $PY_FILES
 | 
					 | 
				
			||||||
							
								
								
									
										173
									
								
								.github/workflows/ci_ubuntu.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										173
									
								
								.github/workflows/ci_ubuntu.yaml
									
									
									
									
										vendored
									
									
								
							@@ -1,173 +0,0 @@
 | 
				
			|||||||
name: CI - Ubuntu
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
on: [pull_request, push]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
permissions: {}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
concurrency:
 | 
					 | 
				
			||||||
  group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
 | 
					 | 
				
			||||||
  cancel-in-progress: ${{ github.head_ref != '' }}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
jobs:
 | 
					 | 
				
			||||||
  ci:
 | 
					 | 
				
			||||||
    name: Build
 | 
					 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					 | 
				
			||||||
    permissions:
 | 
					 | 
				
			||||||
      actions: write
 | 
					 | 
				
			||||||
      security-events: write
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    strategy:
 | 
					 | 
				
			||||||
      fail-fast: false
 | 
					 | 
				
			||||||
      matrix:
 | 
					 | 
				
			||||||
        libt_version: ["2.0.11", "1.2.20"]
 | 
					 | 
				
			||||||
        qbt_gui: ["GUI=ON", "GUI=OFF"]
 | 
					 | 
				
			||||||
        qt_version: ["6.5.2"]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    env:
 | 
					 | 
				
			||||||
      boost_path: "${{ github.workspace }}/../boost"
 | 
					 | 
				
			||||||
      harden_flags: "-D_FORTIFY_SOURCE=3 -D_GLIBCXX_ASSERTIONS"
 | 
					 | 
				
			||||||
      libtorrent_path: "${{ github.workspace }}/../libtorrent"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    steps:
 | 
					 | 
				
			||||||
      - name: Checkout repository
 | 
					 | 
				
			||||||
        uses: actions/checkout@v4
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          persist-credentials: false
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Install dependencies
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          sudo apt update
 | 
					 | 
				
			||||||
          sudo apt install \
 | 
					 | 
				
			||||||
            build-essential cmake ninja-build \
 | 
					 | 
				
			||||||
            libssl-dev libxkbcommon-x11-dev libxcb-cursor-dev zlib1g-dev
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Setup ccache
 | 
					 | 
				
			||||||
        uses: Chocobo1/setup-ccache-action@v1
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          store_cache: ${{ github.ref == 'refs/heads/master' }}
 | 
					 | 
				
			||||||
          update_packager_index: false
 | 
					 | 
				
			||||||
          ccache_options: |
 | 
					 | 
				
			||||||
            max_size=2G
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Install boost
 | 
					 | 
				
			||||||
        env:
 | 
					 | 
				
			||||||
          BOOST_MAJOR_VERSION: "1"
 | 
					 | 
				
			||||||
          BOOST_MINOR_VERSION: "77"
 | 
					 | 
				
			||||||
          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"
 | 
					 | 
				
			||||||
          boost_url2="https://sourceforge.net/projects/boost/files/boost/${{ env.BOOST_MAJOR_VERSION }}.${{ env.BOOST_MINOR_VERSION }}.${{ env.BOOST_PATCH_VERSION }}/boost_${{ env.BOOST_MAJOR_VERSION }}_${{ env.BOOST_MINOR_VERSION }}_${{ env.BOOST_PATCH_VERSION }}.tar.gz"
 | 
					 | 
				
			||||||
          set +e
 | 
					 | 
				
			||||||
          curl -L -o "${{ runner.temp }}/boost.tar.gz" "$boost_url"
 | 
					 | 
				
			||||||
          tar -xf "${{ runner.temp }}/boost.tar.gz" -C "${{ github.workspace }}/.."; _exitCode="$?"
 | 
					 | 
				
			||||||
          if [ "$_exitCode" -ne "0" ]; then
 | 
					 | 
				
			||||||
            curl -L -o "${{ runner.temp }}/boost.tar.gz" "$boost_url2"
 | 
					 | 
				
			||||||
            tar -xf "${{ runner.temp }}/boost.tar.gz" -C "${{ github.workspace }}/.."; _exitCode="$?"
 | 
					 | 
				
			||||||
          fi
 | 
					 | 
				
			||||||
          mv "${{ github.workspace }}/.."/boost_* "${{ env.boost_path }}"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Install Qt
 | 
					 | 
				
			||||||
        uses: jurplel/install-qt-action@v4
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          version: ${{ matrix.qt_version }}
 | 
					 | 
				
			||||||
          archives: icu qtbase qtdeclarative qtsvg qttools
 | 
					 | 
				
			||||||
          cache: true
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Install libtorrent
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          git clone \
 | 
					 | 
				
			||||||
            --branch v${{ matrix.libt_version }} \
 | 
					 | 
				
			||||||
            --depth 1 \
 | 
					 | 
				
			||||||
            --recurse-submodules \
 | 
					 | 
				
			||||||
            https://github.com/arvidn/libtorrent.git \
 | 
					 | 
				
			||||||
            ${{ env.libtorrent_path }}
 | 
					 | 
				
			||||||
          cd ${{ env.libtorrent_path }}
 | 
					 | 
				
			||||||
          CXXFLAGS="$CXXFLAGS ${{ env.harden_flags }}" \
 | 
					 | 
				
			||||||
          cmake \
 | 
					 | 
				
			||||||
            -B build \
 | 
					 | 
				
			||||||
            -G "Ninja" \
 | 
					 | 
				
			||||||
            -DBUILD_SHARED_LIBS=OFF \
 | 
					 | 
				
			||||||
            -DCMAKE_BUILD_TYPE=RelWithDebInfo \
 | 
					 | 
				
			||||||
            -DCMAKE_CXX_STANDARD=20 \
 | 
					 | 
				
			||||||
            -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
 | 
					 | 
				
			||||||
            -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@v3
 | 
					 | 
				
			||||||
        if: startsWith(matrix.libt_version, 2) && (matrix.qbt_gui == 'GUI=ON')
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          config-file: ./.github/workflows/helper/codeql/cpp.yaml
 | 
					 | 
				
			||||||
          languages: cpp
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Build qBittorrent
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          CXXFLAGS="$CXXFLAGS ${{ env.harden_flags }} -DQT_FORCE_ASSERTS -Werror" \
 | 
					 | 
				
			||||||
          LDFLAGS="$LDFLAGS -gz" \
 | 
					 | 
				
			||||||
          cmake \
 | 
					 | 
				
			||||||
            -B build \
 | 
					 | 
				
			||||||
            -G "Ninja" \
 | 
					 | 
				
			||||||
            -DCMAKE_BUILD_TYPE=RelWithDebInfo \
 | 
					 | 
				
			||||||
            -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
 | 
					 | 
				
			||||||
            -DBOOST_ROOT="${{ env.boost_path }}" \
 | 
					 | 
				
			||||||
            -DCMAKE_INSTALL_PREFIX="/usr" \
 | 
					 | 
				
			||||||
            -DTESTING=ON \
 | 
					 | 
				
			||||||
            -DVERBOSE_CONFIGURE=ON \
 | 
					 | 
				
			||||||
            -D${{ matrix.qbt_gui }}
 | 
					 | 
				
			||||||
          cmake --build build --target qbt_update_translations
 | 
					 | 
				
			||||||
          cmake --build build
 | 
					 | 
				
			||||||
          cmake --build build --target check
 | 
					 | 
				
			||||||
          DESTDIR="qbittorrent" cmake --install build
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Run CodeQL analysis
 | 
					 | 
				
			||||||
        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 }}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Prepare build artifacts
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          mkdir upload
 | 
					 | 
				
			||||||
          mkdir upload/cmake
 | 
					 | 
				
			||||||
          cp build/compile_commands.json upload/cmake
 | 
					 | 
				
			||||||
          mkdir upload/cmake/libtorrent
 | 
					 | 
				
			||||||
          cp ${{ env.libtorrent_path }}/build/compile_commands.json upload/cmake/libtorrent
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Install AppImage
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          curl \
 | 
					 | 
				
			||||||
            -L \
 | 
					 | 
				
			||||||
            -Z \
 | 
					 | 
				
			||||||
            -O https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage \
 | 
					 | 
				
			||||||
            -O https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage \
 | 
					 | 
				
			||||||
            -O https://github.com/linuxdeploy/linuxdeploy-plugin-appimage/releases/download/continuous/linuxdeploy-plugin-appimage-x86_64.AppImage
 | 
					 | 
				
			||||||
          chmod +x \
 | 
					 | 
				
			||||||
            linuxdeploy-x86_64.AppImage \
 | 
					 | 
				
			||||||
            linuxdeploy-plugin-qt-x86_64.AppImage \
 | 
					 | 
				
			||||||
            linuxdeploy-plugin-appimage-x86_64.AppImage
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Prepare files for AppImage
 | 
					 | 
				
			||||||
        if: matrix.qbt_gui == 'GUI=OFF'
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          mkdir -p qbittorrent/usr/share/applications
 | 
					 | 
				
			||||||
          cp .github/workflows/helper/appimage/org.qbittorrent.qBittorrent.desktop qbittorrent/usr/share/applications/org.qbittorrent.qBittorrent.desktop
 | 
					 | 
				
			||||||
          mkdir -p qbittorrent/usr/share/icons/hicolor/scalable/apps
 | 
					 | 
				
			||||||
          cp dist/unix/menuicons/scalable/apps/qbittorrent.svg qbittorrent/usr/share/icons/hicolor/scalable/apps/qbittorrent.svg
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Package AppImage
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          ./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
 | 
					 | 
				
			||||||
          NO_APPSTREAM=1 \
 | 
					 | 
				
			||||||
            OUTPUT=upload/qbittorrent-CI_Ubuntu_x86_64.AppImage \
 | 
					 | 
				
			||||||
            ./linuxdeploy-x86_64.AppImage --appdir qbittorrent --output appimage
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Upload build artifacts
 | 
					 | 
				
			||||||
        uses: actions/upload-artifact@v4
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          name: qBittorrent-CI_Ubuntu-x64_${{ matrix.qbt_gui }}_libtorrent-${{ matrix.libt_version }}_Qt-${{ matrix.qt_version }}
 | 
					 | 
				
			||||||
          path: upload
 | 
					 | 
				
			||||||
							
								
								
									
										54
									
								
								.github/workflows/ci_webui.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										54
									
								
								.github/workflows/ci_webui.yaml
									
									
									
									
										vendored
									
									
								
							@@ -1,54 +0,0 @@
 | 
				
			|||||||
name: CI - WebUI
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
on: [pull_request, push]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
permissions: {}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
concurrency:
 | 
					 | 
				
			||||||
  group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
 | 
					 | 
				
			||||||
  cancel-in-progress: ${{ github.head_ref != '' }}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
jobs:
 | 
					 | 
				
			||||||
  ci:
 | 
					 | 
				
			||||||
    name: Check
 | 
					 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					 | 
				
			||||||
    permissions:
 | 
					 | 
				
			||||||
      security-events: write
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    defaults:
 | 
					 | 
				
			||||||
      run:
 | 
					 | 
				
			||||||
        working-directory: src/webui/www
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    steps:
 | 
					 | 
				
			||||||
      - name: Checkout repository
 | 
					 | 
				
			||||||
        uses: actions/checkout@v4
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          persist-credentials: false
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Setup nodejs
 | 
					 | 
				
			||||||
        uses: actions/setup-node@v4
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          node-version: 'lts/*'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Install tools
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          npm install
 | 
					 | 
				
			||||||
          npm ls
 | 
					 | 
				
			||||||
          npm ls --all
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Lint code
 | 
					 | 
				
			||||||
        run: npm run lint
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Format code
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          npm run format
 | 
					 | 
				
			||||||
          git diff --exit-code
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Initialize CodeQL
 | 
					 | 
				
			||||||
        uses: github/codeql-action/init@v3
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          config-file: .github/workflows/helper/codeql/js.yaml
 | 
					 | 
				
			||||||
          languages: javascript
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Run CodeQL analysis
 | 
					 | 
				
			||||||
        uses: github/codeql-action/analyze@v3
 | 
					 | 
				
			||||||
							
								
								
									
										203
									
								
								.github/workflows/ci_windows.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										203
									
								
								.github/workflows/ci_windows.yaml
									
									
									
									
										vendored
									
									
								
							@@ -1,203 +0,0 @@
 | 
				
			|||||||
name: CI - Windows
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
on: [pull_request, push]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
permissions: {}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
concurrency:
 | 
					 | 
				
			||||||
  group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
 | 
					 | 
				
			||||||
  cancel-in-progress: ${{ github.head_ref != '' }}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
jobs:
 | 
					 | 
				
			||||||
  ci:
 | 
					 | 
				
			||||||
    name: Build
 | 
					 | 
				
			||||||
    runs-on: windows-latest
 | 
					 | 
				
			||||||
    permissions:
 | 
					 | 
				
			||||||
      actions: write
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    strategy:
 | 
					 | 
				
			||||||
      fail-fast: false
 | 
					 | 
				
			||||||
      matrix:
 | 
					 | 
				
			||||||
        libt_version: ["2.0.11", "1.2.20"]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    env:
 | 
					 | 
				
			||||||
      boost_path: "${{ github.workspace }}/../boost"
 | 
					 | 
				
			||||||
      libtorrent_path: "${{ github.workspace }}/../libtorrent"
 | 
					 | 
				
			||||||
      vcpkg_path: "c:/vcpkg"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    steps:
 | 
					 | 
				
			||||||
      - name: Checkout repository
 | 
					 | 
				
			||||||
        uses: actions/checkout@v4
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          persist-credentials: false
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Setup devcmd
 | 
					 | 
				
			||||||
        uses: ilammy/msvc-dev-cmd@v1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Install build tools
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          if ((Get-Command "ninja.exe" -ErrorAction SilentlyContinue) -eq $null)
 | 
					 | 
				
			||||||
          {
 | 
					 | 
				
			||||||
             choco install ninja
 | 
					 | 
				
			||||||
          }
 | 
					 | 
				
			||||||
          where.exe ninja
 | 
					 | 
				
			||||||
          ninja --version
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      # https://learn.microsoft.com/en-us/vcpkg/users/binarycaching#gha
 | 
					 | 
				
			||||||
      - name: Set variables for vcpkg
 | 
					 | 
				
			||||||
        uses: actions/github-script@v7
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          script: |
 | 
					 | 
				
			||||||
            core.exportVariable('ACTIONS_CACHE_URL', (process.env.ACTIONS_CACHE_URL || ''));
 | 
					 | 
				
			||||||
            core.exportVariable('ACTIONS_RUNTIME_TOKEN', (process.env.ACTIONS_RUNTIME_TOKEN || ''));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Install dependencies with vcpkg
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          # create our own triplet
 | 
					 | 
				
			||||||
          New-Item `
 | 
					 | 
				
			||||||
            -Force `
 | 
					 | 
				
			||||||
            -ItemType File `
 | 
					 | 
				
			||||||
            -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/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 = `
 | 
					 | 
				
			||||||
            "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"
 | 
					 | 
				
			||||||
          ${{ env.vcpkg_path }}/vcpkg.exe install `
 | 
					 | 
				
			||||||
            --binarysource="clear;x-gha,readwrite" `
 | 
					 | 
				
			||||||
            --clean-after-build `
 | 
					 | 
				
			||||||
            --overlay-triplets="${{ env.vcpkg_path }}/triplets_overlay" `
 | 
					 | 
				
			||||||
            $packages
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Install boost
 | 
					 | 
				
			||||||
        env:
 | 
					 | 
				
			||||||
          BOOST_MAJOR_VERSION: "1"
 | 
					 | 
				
			||||||
          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"
 | 
					 | 
				
			||||||
          $boost_url2="https://sourceforge.net/projects/boost/files/boost/${{ env.BOOST_MAJOR_VERSION }}.${{ env.BOOST_MINOR_VERSION }}.${{ env.BOOST_PATCH_VERSION }}/boost_${{ env.BOOST_MAJOR_VERSION }}_${{ env.BOOST_MINOR_VERSION }}_${{ env.BOOST_PATCH_VERSION }}.tar.gz"
 | 
					 | 
				
			||||||
          curl -L -o "${{ runner.temp }}/boost.tar.gz" "$boost_url"
 | 
					 | 
				
			||||||
          tar -xf "${{ runner.temp }}/boost.tar.gz" -C "${{ github.workspace }}/.."
 | 
					 | 
				
			||||||
          if ($LastExitCode -ne 0)
 | 
					 | 
				
			||||||
          {
 | 
					 | 
				
			||||||
            curl -L -o "${{ runner.temp }}/boost.tar.gz" "$boost_url2"
 | 
					 | 
				
			||||||
            tar -xf "${{ runner.temp }}/boost.tar.gz" -C "${{ github.workspace }}/.."
 | 
					 | 
				
			||||||
          }
 | 
					 | 
				
			||||||
          move "${{ github.workspace }}/../boost_*" "${{ env.boost_path }}"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Install Qt
 | 
					 | 
				
			||||||
        uses: jurplel/install-qt-action@v4
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          version: "6.8.0"
 | 
					 | 
				
			||||||
          arch: win64_msvc2022_64
 | 
					 | 
				
			||||||
          archives: qtbase qtsvg qttools
 | 
					 | 
				
			||||||
          cache: true
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Install libtorrent
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          git clone `
 | 
					 | 
				
			||||||
            --branch v${{ matrix.libt_version }} `
 | 
					 | 
				
			||||||
            --depth 1 `
 | 
					 | 
				
			||||||
            --recurse-submodules `
 | 
					 | 
				
			||||||
            https://github.com/arvidn/libtorrent.git `
 | 
					 | 
				
			||||||
            ${{ env.libtorrent_path }}
 | 
					 | 
				
			||||||
          cd ${{ env.libtorrent_path }}
 | 
					 | 
				
			||||||
          $env:CXXFLAGS+=" /guard:cf"
 | 
					 | 
				
			||||||
          $env:LDFLAGS+=" /guard:cf"
 | 
					 | 
				
			||||||
          cmake `
 | 
					 | 
				
			||||||
            -B build `
 | 
					 | 
				
			||||||
            -G "Ninja" `
 | 
					 | 
				
			||||||
            -DCMAKE_BUILD_TYPE=RelWithDebInfo `
 | 
					 | 
				
			||||||
            -DCMAKE_CXX_STANDARD=20 `
 | 
					 | 
				
			||||||
            -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 }}" `
 | 
					 | 
				
			||||||
            -DBUILD_SHARED_LIBS=OFF `
 | 
					 | 
				
			||||||
            -Ddeprecated-functions=OFF `
 | 
					 | 
				
			||||||
            -Dstatic_runtime=OFF `
 | 
					 | 
				
			||||||
            -DVCPKG_TARGET_TRIPLET=x64-windows-static-md-release
 | 
					 | 
				
			||||||
          cmake --build build
 | 
					 | 
				
			||||||
          cmake --install build
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Build qBittorrent
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          $env:CXXFLAGS+="/DQT_FORCE_ASSERTS /WX"
 | 
					 | 
				
			||||||
          cmake `
 | 
					 | 
				
			||||||
            -B build `
 | 
					 | 
				
			||||||
            -G "Ninja" `
 | 
					 | 
				
			||||||
            -DCMAKE_BUILD_TYPE=RelWithDebInfo `
 | 
					 | 
				
			||||||
            -DCMAKE_EXPORT_COMPILE_COMMANDS=ON `
 | 
					 | 
				
			||||||
            -DCMAKE_TOOLCHAIN_FILE="${{ env.vcpkg_path }}/scripts/buildsystems/vcpkg.cmake" `
 | 
					 | 
				
			||||||
            -DBOOST_ROOT="${{ env.boost_path }}" `
 | 
					 | 
				
			||||||
            -DLibtorrentRasterbar_DIR="${{ env.libtorrent_path }}/install/lib/cmake/LibtorrentRasterbar" `
 | 
					 | 
				
			||||||
            -DMSVC_RUNTIME_DYNAMIC=ON `
 | 
					 | 
				
			||||||
            -DTESTING=ON `
 | 
					 | 
				
			||||||
            -DVCPKG_TARGET_TRIPLET=x64-windows-static-md-release `
 | 
					 | 
				
			||||||
            -DVERBOSE_CONFIGURE=ON `
 | 
					 | 
				
			||||||
            --graphviz=build/target_graph.dot
 | 
					 | 
				
			||||||
          cmake --build build --target qbt_update_translations
 | 
					 | 
				
			||||||
          cmake --build build
 | 
					 | 
				
			||||||
          cmake --build build --target check
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Prepare build artifacts
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          mkdir upload
 | 
					 | 
				
			||||||
          mkdir upload/qBittorrent
 | 
					 | 
				
			||||||
          copy build/qbittorrent.exe upload/qBittorrent
 | 
					 | 
				
			||||||
          copy build/qbittorrent.pdb upload/qBittorrent
 | 
					 | 
				
			||||||
          copy dist/windows/qt.conf upload/qBittorrent
 | 
					 | 
				
			||||||
          # runtimes
 | 
					 | 
				
			||||||
          copy "${{ env.Qt_ROOT_DIR }}/bin/Qt6Core.dll" upload/qBittorrent
 | 
					 | 
				
			||||||
          copy "${{ env.Qt_ROOT_DIR }}/bin/Qt6Gui.dll" upload/qBittorrent
 | 
					 | 
				
			||||||
          copy "${{ env.Qt_ROOT_DIR }}/bin/Qt6Network.dll" upload/qBittorrent
 | 
					 | 
				
			||||||
          copy "${{ env.Qt_ROOT_DIR }}/bin/Qt6Sql.dll" upload/qBittorrent
 | 
					 | 
				
			||||||
          copy "${{ env.Qt_ROOT_DIR }}/bin/Qt6Svg.dll" upload/qBittorrent
 | 
					 | 
				
			||||||
          copy "${{ env.Qt_ROOT_DIR }}/bin/Qt6Widgets.dll" upload/qBittorrent
 | 
					 | 
				
			||||||
          copy "${{ env.Qt_ROOT_DIR }}/bin/Qt6Xml.dll" upload/qBittorrent
 | 
					 | 
				
			||||||
          mkdir upload/qBittorrent/plugins/iconengines
 | 
					 | 
				
			||||||
          copy "${{ env.Qt_ROOT_DIR }}/plugins/iconengines/qsvgicon.dll" upload/qBittorrent/plugins/iconengines
 | 
					 | 
				
			||||||
          mkdir upload/qBittorrent/plugins/imageformats
 | 
					 | 
				
			||||||
          copy "${{ env.Qt_ROOT_DIR }}/plugins/imageformats/qico.dll" upload/qBittorrent/plugins/imageformats
 | 
					 | 
				
			||||||
          copy "${{ env.Qt_ROOT_DIR }}/plugins/imageformats/qsvg.dll" upload/qBittorrent/plugins/imageformats
 | 
					 | 
				
			||||||
          mkdir upload/qBittorrent/plugins/platforms
 | 
					 | 
				
			||||||
          copy "${{ env.Qt_ROOT_DIR }}/plugins/platforms/qwindows.dll" upload/qBittorrent/plugins/platforms
 | 
					 | 
				
			||||||
          mkdir upload/qBittorrent/plugins/sqldrivers
 | 
					 | 
				
			||||||
          copy "${{ env.Qt_ROOT_DIR }}/plugins/sqldrivers/qsqlite.dll" upload/qBittorrent/plugins/sqldrivers
 | 
					 | 
				
			||||||
          mkdir upload/qBittorrent/plugins/styles
 | 
					 | 
				
			||||||
          copy "${{ env.Qt_ROOT_DIR }}/plugins/styles/qmodernwindowsstyle.dll" upload/qBittorrent/plugins/styles
 | 
					 | 
				
			||||||
          mkdir upload/qBittorrent/plugins/tls
 | 
					 | 
				
			||||||
          copy "${{ env.Qt_ROOT_DIR }}/plugins/tls/qschannelbackend.dll" upload/qBittorrent/plugins/tls
 | 
					 | 
				
			||||||
          # cmake additionals
 | 
					 | 
				
			||||||
          mkdir upload/cmake
 | 
					 | 
				
			||||||
          copy build/compile_commands.json upload/cmake
 | 
					 | 
				
			||||||
          copy build/target_graph.dot upload/cmake
 | 
					 | 
				
			||||||
          mkdir upload/cmake/libtorrent
 | 
					 | 
				
			||||||
          copy ${{ env.libtorrent_path }}/build/compile_commands.json upload/cmake/libtorrent
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Upload build artifacts
 | 
					 | 
				
			||||||
        uses: actions/upload-artifact@v4
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          name: qBittorrent-CI_Windows-x64_libtorrent-${{ matrix.libt_version }}
 | 
					 | 
				
			||||||
          path: upload
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Create installer
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          7z x -o"dist/windows/" "dist/windows/NSISPlugins.zip"
 | 
					 | 
				
			||||||
          makensis /DQBT_DIST_DIR="../../upload/qBittorrent" /WX dist/windows/qbittorrent.nsi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Upload installer
 | 
					 | 
				
			||||||
        uses: actions/upload-artifact@v4
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          name: qBittorrent-CI_Windows-x64_libtorrent-${{ matrix.libt_version }}-setup
 | 
					 | 
				
			||||||
          path: dist/windows/qbittorrent_*_setup.exe
 | 
					 | 
				
			||||||
							
								
								
									
										118
									
								
								.github/workflows/coverity-scan.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										118
									
								
								.github/workflows/coverity-scan.yaml
									
									
									
									
										vendored
									
									
								
							@@ -1,118 +0,0 @@
 | 
				
			|||||||
name: Coverity Scan
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
on:
 | 
					 | 
				
			||||||
  schedule:
 | 
					 | 
				
			||||||
    - 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
 | 
					 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    strategy:
 | 
					 | 
				
			||||||
      matrix:
 | 
					 | 
				
			||||||
        libt_version: ["2.0.11"]
 | 
					 | 
				
			||||||
        qbt_gui: ["GUI=ON"]
 | 
					 | 
				
			||||||
        qt_version: ["6.5.2"]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    env:
 | 
					 | 
				
			||||||
      boost_path: "${{ github.workspace }}/../boost"
 | 
					 | 
				
			||||||
      coverity_path: "${{ github.workspace }}/../coverity"
 | 
					 | 
				
			||||||
      libtorrent_path: "${{ github.workspace }}/../libtorrent"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    steps:
 | 
					 | 
				
			||||||
      - name: Checkout repository
 | 
					 | 
				
			||||||
        uses: actions/checkout@v4
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          persist-credentials: false
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Install dependencies
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          sudo apt update
 | 
					 | 
				
			||||||
          sudo apt install \
 | 
					 | 
				
			||||||
            build-essential cmake ninja-build \
 | 
					 | 
				
			||||||
            libssl-dev libxkbcommon-x11-dev libxcb-cursor-dev zlib1g-dev
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Install boost
 | 
					 | 
				
			||||||
        env:
 | 
					 | 
				
			||||||
          BOOST_MAJOR_VERSION: "1"
 | 
					 | 
				
			||||||
          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"
 | 
					 | 
				
			||||||
          boost_url2="https://sourceforge.net/projects/boost/files/boost/${{ env.BOOST_MAJOR_VERSION }}.${{ env.BOOST_MINOR_VERSION }}.${{ env.BOOST_PATCH_VERSION }}/boost_${{ env.BOOST_MAJOR_VERSION }}_${{ env.BOOST_MINOR_VERSION }}_${{ env.BOOST_PATCH_VERSION }}.tar.gz"
 | 
					 | 
				
			||||||
          set +e
 | 
					 | 
				
			||||||
          curl -L -o "${{ runner.temp }}/boost.tar.gz" "$boost_url"
 | 
					 | 
				
			||||||
          tar -xf "${{ runner.temp }}/boost.tar.gz" -C "${{ github.workspace }}/.."; _exitCode="$?"
 | 
					 | 
				
			||||||
          if [ "$_exitCode" -ne "0" ]; then
 | 
					 | 
				
			||||||
            curl -L -o "${{ runner.temp }}/boost.tar.gz" "$boost_url2"
 | 
					 | 
				
			||||||
            tar -xf "${{ runner.temp }}/boost.tar.gz" -C "${{ github.workspace }}/.."; _exitCode="$?"
 | 
					 | 
				
			||||||
          fi
 | 
					 | 
				
			||||||
          mv "${{ github.workspace }}/.."/boost_* "${{ env.boost_path }}"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Install Qt
 | 
					 | 
				
			||||||
        uses: jurplel/install-qt-action@v4
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          version: ${{ matrix.qt_version }}
 | 
					 | 
				
			||||||
          archives: icu qtbase qtdeclarative qtsvg qttools
 | 
					 | 
				
			||||||
          cache: true
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Install libtorrent
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          git clone \
 | 
					 | 
				
			||||||
            --branch v${{ matrix.libt_version }} \
 | 
					 | 
				
			||||||
            --depth 1 \
 | 
					 | 
				
			||||||
            --recurse-submodules \
 | 
					 | 
				
			||||||
            https://github.com/arvidn/libtorrent.git \
 | 
					 | 
				
			||||||
            ${{ env.libtorrent_path }}
 | 
					 | 
				
			||||||
          cd ${{ env.libtorrent_path }}
 | 
					 | 
				
			||||||
          cmake \
 | 
					 | 
				
			||||||
            -B build \
 | 
					 | 
				
			||||||
            -G "Ninja" \
 | 
					 | 
				
			||||||
            -DCMAKE_BUILD_TYPE=RelWithDebInfo \
 | 
					 | 
				
			||||||
            -DCMAKE_CXX_STANDARD=20 \
 | 
					 | 
				
			||||||
            -DBOOST_ROOT="${{ env.boost_path }}" \
 | 
					 | 
				
			||||||
            -Ddeprecated-functions=OFF
 | 
					 | 
				
			||||||
          cmake --build build
 | 
					 | 
				
			||||||
          sudo cmake --install build
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Download Coverity Build Tool
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          curl \
 | 
					 | 
				
			||||||
            -L \
 | 
					 | 
				
			||||||
            -d "token=${{ secrets.COVERITY_SCAN_TOKEN }}&project=qbittorrent%2FqBittorrent" \
 | 
					 | 
				
			||||||
            -o "${{ runner.temp }}/coverity_tool.tgz" \
 | 
					 | 
				
			||||||
            "https://scan.coverity.com/download/linux64"
 | 
					 | 
				
			||||||
          mkdir -p ${{ env.coverity_path }}
 | 
					 | 
				
			||||||
          tar \
 | 
					 | 
				
			||||||
            -xf "${{ runner.temp }}/coverity_tool.tgz" \
 | 
					 | 
				
			||||||
            -C "${{ env.coverity_path }}" \
 | 
					 | 
				
			||||||
            --strip-components 1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Build qBittorrent
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          cmake \
 | 
					 | 
				
			||||||
            -B build \
 | 
					 | 
				
			||||||
            -G "Ninja" \
 | 
					 | 
				
			||||||
            -DCMAKE_BUILD_TYPE=RelWithDebInfo \
 | 
					 | 
				
			||||||
            -DBOOST_ROOT="${{ env.boost_path }}" \
 | 
					 | 
				
			||||||
            -DVERBOSE_CONFIGURE=ON \
 | 
					 | 
				
			||||||
            -D${{ matrix.qbt_gui }}
 | 
					 | 
				
			||||||
          PATH="${{ env.coverity_path }}/bin:$PATH" \
 | 
					 | 
				
			||||||
          cov-build \
 | 
					 | 
				
			||||||
            --dir cov-int \
 | 
					 | 
				
			||||||
            cmake --build build
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Submit the result to Coverity Scan
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          tar -caf qbittorrent.xz cov-int
 | 
					 | 
				
			||||||
          curl \
 | 
					 | 
				
			||||||
            --form token="${{ secrets.COVERITY_SCAN_TOKEN }}" \
 | 
					 | 
				
			||||||
            --form email=sledgehammer999@qbittorrent.org \
 | 
					 | 
				
			||||||
            --form file=@qbittorrent.xz \
 | 
					 | 
				
			||||||
            --form version="$(git rev-parse --short HEAD)" \
 | 
					 | 
				
			||||||
            --form description="master" \
 | 
					 | 
				
			||||||
            https://scan.coverity.com/builds?project=qbittorrent%2FqBittorrent
 | 
					 | 
				
			||||||
							
								
								
									
										13
									
								
								.github/workflows/helper/appimage/export_vars.sh
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										13
									
								
								.github/workflows/helper/appimage/export_vars.sh
									
									
									
									
										vendored
									
									
								
							@@ -1,13 +0,0 @@
 | 
				
			|||||||
#!/bin/sh
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# this file is called from AppRun so 'root_dir' will point to where AppRun is
 | 
					 | 
				
			||||||
root_dir="$(readlink -f "$(dirname "$0")")"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Insert the default values because after the test we prepend our path
 | 
					 | 
				
			||||||
# and it will create problems with DEs (eg KDE) that don't set the variable
 | 
					 | 
				
			||||||
# and rely on the default paths
 | 
					 | 
				
			||||||
if [ -z "${XDG_DATA_DIRS}" ]; then
 | 
					 | 
				
			||||||
    XDG_DATA_DIRS="/usr/local/share/:/usr/share/"
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export XDG_DATA_DIRS="${root_dir}/usr/share:${XDG_DATA_DIRS}"
 | 
					 | 
				
			||||||
@@ -1,6 +0,0 @@
 | 
				
			|||||||
[Desktop Entry]
 | 
					 | 
				
			||||||
Name=qBittorrent
 | 
					 | 
				
			||||||
Exec=qbittorrent-nox %U
 | 
					 | 
				
			||||||
Icon=qbittorrent
 | 
					 | 
				
			||||||
Type=Application
 | 
					 | 
				
			||||||
Categories=Network
 | 
					 | 
				
			||||||
							
								
								
									
										14
									
								
								.github/workflows/helper/codeql/cpp.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										14
									
								
								.github/workflows/helper/codeql/cpp.yaml
									
									
									
									
										vendored
									
									
								
							@@ -1,14 +0,0 @@
 | 
				
			|||||||
name: "CodeQL config for C++"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
queries:
 | 
					 | 
				
			||||||
  - uses: security-and-quality
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
query-filters:
 | 
					 | 
				
			||||||
  - exclude:
 | 
					 | 
				
			||||||
      id: cpp/commented-out-code
 | 
					 | 
				
			||||||
  - exclude:
 | 
					 | 
				
			||||||
      id: cpp/include-non-header
 | 
					 | 
				
			||||||
  - exclude:
 | 
					 | 
				
			||||||
      id: cpp/loop-variable-changed
 | 
					 | 
				
			||||||
  - exclude:
 | 
					 | 
				
			||||||
      id: cpp/useless-expression
 | 
					 | 
				
			||||||
							
								
								
									
										11
									
								
								.github/workflows/helper/codeql/js.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										11
									
								
								.github/workflows/helper/codeql/js.yaml
									
									
									
									
										vendored
									
									
								
							@@ -1,11 +0,0 @@
 | 
				
			|||||||
name: "CodeQL config for Javascript"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
paths-ignore:
 | 
					 | 
				
			||||||
  - "**/lib/*"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
queries:
 | 
					 | 
				
			||||||
  - uses: security-and-quality
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
query-filters:
 | 
					 | 
				
			||||||
  - exclude:
 | 
					 | 
				
			||||||
      id: js/superfluous-trailing-arguments
 | 
					 | 
				
			||||||
							
								
								
									
										20
									
								
								.github/workflows/helper/pre-commit/.typos.toml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										20
									
								
								.github/workflows/helper/pre-commit/.typos.toml
									
									
									
									
										vendored
									
									
								
							@@ -1,20 +0,0 @@
 | 
				
			|||||||
# https://github.com/crate-ci/typos/blob/master/docs/reference.md
 | 
					 | 
				
			||||||
# https://github.com/crate-ci/typos/blob/master/docs/design.md#identifiers-and-words
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# try adding to `identifiers` list first, if doesn't work then `words` list
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[default.extend-identifiers]
 | 
					 | 
				
			||||||
additionals = "additionals"
 | 
					 | 
				
			||||||
caf = "caf"
 | 
					 | 
				
			||||||
curren = "curren"
 | 
					 | 
				
			||||||
FO = "FO"
 | 
					 | 
				
			||||||
ket = "ket"
 | 
					 | 
				
			||||||
Q_INVOKABLE = "Q_INVOKABLE"
 | 
					 | 
				
			||||||
switchs = "switchs"
 | 
					 | 
				
			||||||
ths = "ths"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[default.extend-words]
 | 
					 | 
				
			||||||
BA = "BA"
 | 
					 | 
				
			||||||
helo = "helo"
 | 
					 | 
				
			||||||
Pn = "Pn"
 | 
					 | 
				
			||||||
UIU = "UIU"
 | 
					 | 
				
			||||||
@@ -1,95 +0,0 @@
 | 
				
			|||||||
#!/usr/bin/env python3
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# A pre-commit hook for checking items order in grid layouts
 | 
					 | 
				
			||||||
# Copyright (C) 2024  Mike Tzou (Chocobo1)
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# This program is free software; you can redistribute it and/or
 | 
					 | 
				
			||||||
# modify it under the terms of the GNU General Public License
 | 
					 | 
				
			||||||
# as published by the Free Software Foundation; either version 2
 | 
					 | 
				
			||||||
# of the License, or (at your option) any later version.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# This program is distributed in the hope that it will be useful,
 | 
					 | 
				
			||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
					 | 
				
			||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
					 | 
				
			||||||
# GNU General Public License for more details.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# You should have received a copy of the GNU General Public License
 | 
					 | 
				
			||||||
# along with this program; if not, write to the Free Software
 | 
					 | 
				
			||||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# In addition, as a special exception, the copyright holders give permission to
 | 
					 | 
				
			||||||
# link this program with the OpenSSL project's "OpenSSL" library (or with
 | 
					 | 
				
			||||||
# modified versions of it that use the same license as the "OpenSSL" library),
 | 
					 | 
				
			||||||
# and distribute the linked executables. You must obey the GNU General Public
 | 
					 | 
				
			||||||
# License in all respects for all of the code used other than "OpenSSL".  If you
 | 
					 | 
				
			||||||
# modify file(s), you may extend this exception to your version of the file(s),
 | 
					 | 
				
			||||||
# but you are not obligated to do so. If you do not wish to do so, delete this
 | 
					 | 
				
			||||||
# exception statement from your version.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
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:
 | 
					 | 
				
			||||||
    stack = [(root, False)]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    while len(stack) > 0:
 | 
					 | 
				
			||||||
        (element, visit) = stack.pop()
 | 
					 | 
				
			||||||
        if visit:
 | 
					 | 
				
			||||||
            visitFunc(element)
 | 
					 | 
				
			||||||
        else:
 | 
					 | 
				
			||||||
            stack.append((element, True))
 | 
					 | 
				
			||||||
            stack.extend((child, False) for child in reversed(element))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def modifyElement(element: ElementTree.Element) -> None:
 | 
					 | 
				
			||||||
    def getSortKey(e: ElementTree.Element) -> tuple[int, int]:
 | 
					 | 
				
			||||||
        if e.tag == 'item':
 | 
					 | 
				
			||||||
            return (int(e.attrib['row']), int(e.attrib['column']))
 | 
					 | 
				
			||||||
        return (-1, -1)  # don't care
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if element.tag == 'layout' and element.attrib['class'] == 'QGridLayout' and len(element) > 0:
 | 
					 | 
				
			||||||
        element[:] = sorted(element, key=getSortKey)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # workaround_2a: ElementTree will unescape `"` and we need to escape it back
 | 
					 | 
				
			||||||
    if element.tag == 'string' and element.text is not None:
 | 
					 | 
				
			||||||
        element.text = element.text.replace('"', '"')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def main(argv: Optional[Sequence[str]] = None) -> int:
 | 
					 | 
				
			||||||
    parser = argparse.ArgumentParser()
 | 
					 | 
				
			||||||
    parser.add_argument('filenames', nargs='*', help='Filenames to check')
 | 
					 | 
				
			||||||
    args = parser.parse_args(argv)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    for filename in args.filenames:
 | 
					 | 
				
			||||||
        with open(filename, 'r+') as f:
 | 
					 | 
				
			||||||
            orig = f.read()
 | 
					 | 
				
			||||||
            root = ElementTree.fromstring(orig)
 | 
					 | 
				
			||||||
            traversePostOrder(root, modifyElement)
 | 
					 | 
				
			||||||
            ElementTree.indent(root, ' ')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            # workaround_1: cannot use `xml_declaration=True` since it uses single quotes instead of Qt preferred double quotes
 | 
					 | 
				
			||||||
            ret = f'<?xml version="1.0" encoding="UTF-8"?>\n{ElementTree.tostring(root, 'unicode')}\n'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            # workaround_2b: ElementTree will turn `"` into `&quot;`, so revert it back
 | 
					 | 
				
			||||||
            ret = ret.replace('&quot;', '"')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            # workaround_3: Qt prefers no whitespaces in self-closing tags
 | 
					 | 
				
			||||||
            ret = re.sub('<(.+) +/>', r'<\1/>', ret)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            if ret != orig:
 | 
					 | 
				
			||||||
                print(f'Tip: run this script to apply the fix: `python {__file__} {filename}`', file=sys.stderr)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                f.seek(0)
 | 
					 | 
				
			||||||
                f.write(ret)
 | 
					 | 
				
			||||||
                f.truncate()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return 0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if __name__ == '__main__':
 | 
					 | 
				
			||||||
    sys.exit(main())
 | 
					 | 
				
			||||||
@@ -1,72 +0,0 @@
 | 
				
			|||||||
#!/usr/bin/env python3
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# A pre-commit hook for detecting problematic <translation> tags
 | 
					 | 
				
			||||||
# Copyright (C) 2021  Mike Tzou (Chocobo1)
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# This program is free software; you can redistribute it and/or
 | 
					 | 
				
			||||||
# modify it under the terms of the GNU General Public License
 | 
					 | 
				
			||||||
# as published by the Free Software Foundation; either version 2
 | 
					 | 
				
			||||||
# of the License, or (at your option) any later version.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# This program is distributed in the hope that it will be useful,
 | 
					 | 
				
			||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
					 | 
				
			||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
					 | 
				
			||||||
# GNU General Public License for more details.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# You should have received a copy of the GNU General Public License
 | 
					 | 
				
			||||||
# along with this program; if not, write to the Free Software
 | 
					 | 
				
			||||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# In addition, as a special exception, the copyright holders give permission to
 | 
					 | 
				
			||||||
# link this program with the OpenSSL project's "OpenSSL" library (or with
 | 
					 | 
				
			||||||
# modified versions of it that use the same license as the "OpenSSL" library),
 | 
					 | 
				
			||||||
# and distribute the linked executables. You must obey the GNU General Public
 | 
					 | 
				
			||||||
# License in all respects for all of the code used other than "OpenSSL".  If you
 | 
					 | 
				
			||||||
# modify file(s), you may extend this exception to your version of the file(s),
 | 
					 | 
				
			||||||
# but you are not obligated to do so. If you do not wish to do so, delete this
 | 
					 | 
				
			||||||
# exception statement from your version.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
from collections.abc import Sequence
 | 
					 | 
				
			||||||
from typing import Optional
 | 
					 | 
				
			||||||
import argparse
 | 
					 | 
				
			||||||
import re
 | 
					 | 
				
			||||||
import sys
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def main(argv: Optional[Sequence[str]] = None) -> int:
 | 
					 | 
				
			||||||
    parser = argparse.ArgumentParser()
 | 
					 | 
				
			||||||
    parser.add_argument('filenames', nargs='*', help='Filenames to check')
 | 
					 | 
				
			||||||
    args = parser.parse_args(argv)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    error_msg = ""
 | 
					 | 
				
			||||||
    regex = re.compile(r"\s*</translation>")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    for filename in args.filenames:
 | 
					 | 
				
			||||||
        line_counter = 1
 | 
					 | 
				
			||||||
        error_buffer = ""
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        with open(filename) as file:
 | 
					 | 
				
			||||||
            try:
 | 
					 | 
				
			||||||
                for line in file:
 | 
					 | 
				
			||||||
                    if (match := regex.match(line)) is not None:
 | 
					 | 
				
			||||||
                        error_buffer += str(f"Defect file: \"{filename}\"\n"
 | 
					 | 
				
			||||||
                                            f"Line: {line_counter}\n"
 | 
					 | 
				
			||||||
                                            f"Column span: {match.span()}\n"
 | 
					 | 
				
			||||||
                                            f"Part: \"{match.group()}\"\n\n")
 | 
					 | 
				
			||||||
                    line_counter += 1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            except UnicodeDecodeError:
 | 
					 | 
				
			||||||
                # not a text file, skip
 | 
					 | 
				
			||||||
                continue
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        error_msg += error_buffer
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if len(error_msg) > 0:
 | 
					 | 
				
			||||||
        print(error_msg)
 | 
					 | 
				
			||||||
        return 1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return 0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if __name__ == '__main__':
 | 
					 | 
				
			||||||
    sys.exit(main())
 | 
					 | 
				
			||||||
							
								
								
									
										26
									
								
								.github/workflows/stale_bot.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										26
									
								
								.github/workflows/stale_bot.yaml
									
									
									
									
										vendored
									
									
								
							@@ -1,26 +0,0 @@
 | 
				
			|||||||
name: Stale bot
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
on:
 | 
					 | 
				
			||||||
  schedule:
 | 
					 | 
				
			||||||
    - cron: '0 0 * * *'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
permissions: {}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
jobs:
 | 
					 | 
				
			||||||
  stale:
 | 
					 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					 | 
				
			||||||
    permissions:
 | 
					 | 
				
			||||||
      pull-requests: write
 | 
					 | 
				
			||||||
    steps:
 | 
					 | 
				
			||||||
      - name: Mark and close stale PRs
 | 
					 | 
				
			||||||
        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."
 | 
					 | 
				
			||||||
          days-before-stale: -1 # avoid marking issues
 | 
					 | 
				
			||||||
          days-before-pr-stale: 60
 | 
					 | 
				
			||||||
          days-before-close: -1 # avoid closing issues
 | 
					 | 
				
			||||||
          days-before-pr-close: 7
 | 
					 | 
				
			||||||
          exempt-all-pr-assignees: true  # avoid stale for all PR with assignees
 | 
					 | 
				
			||||||
          exempt-all-pr-milestones: true # avoid stale for all PR with milestones
 | 
					 | 
				
			||||||
          operations-per-run: 200
 | 
					 | 
				
			||||||
							
								
								
									
										9
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										9
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -1,12 +1,9 @@
 | 
				
			|||||||
.vscode/
 | 
					 | 
				
			||||||
src/gui/geoip/GeoIP.dat
 | 
					src/gui/geoip/GeoIP.dat
 | 
				
			||||||
src/gui/geoip/GeoIP.dat.gz
 | 
					src/gui/geoip/GeoIP.dat.gz
 | 
				
			||||||
src/qbittorrent
 | 
					src/qbittorrent
 | 
				
			||||||
src/qbittorrent-nox
 | 
					src/qbittorrent-nox
 | 
				
			||||||
src/release
 | 
					src/release
 | 
				
			||||||
src/debug
 | 
					src/debug
 | 
				
			||||||
src/base/version.h
 | 
					 | 
				
			||||||
CMakeLists.txt.user*
 | 
					 | 
				
			||||||
qbittorrent.pro.user*
 | 
					qbittorrent.pro.user*
 | 
				
			||||||
conf.pri
 | 
					conf.pri
 | 
				
			||||||
Makefile*
 | 
					Makefile*
 | 
				
			||||||
@@ -17,7 +14,6 @@ Makefile*
 | 
				
			|||||||
*.o
 | 
					*.o
 | 
				
			||||||
*.pdb
 | 
					*.pdb
 | 
				
			||||||
*.exe
 | 
					*.exe
 | 
				
			||||||
*.dll
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Generated MOC, resource and UI files
 | 
					# Generated MOC, resource and UI files
 | 
				
			||||||
moc_*.cpp
 | 
					moc_*.cpp
 | 
				
			||||||
@@ -25,7 +21,7 @@ moc_*.h
 | 
				
			|||||||
qrc_*.cpp
 | 
					qrc_*.cpp
 | 
				
			||||||
ui_*.h
 | 
					ui_*.h
 | 
				
			||||||
*.moc
 | 
					*.moc
 | 
				
			||||||
*.qm
 | 
					src/lang/qbittorrent_*.qm
 | 
				
			||||||
.DS_Store
 | 
					.DS_Store
 | 
				
			||||||
.qmake.stash
 | 
					.qmake.stash
 | 
				
			||||||
src/qbittorrent.app
 | 
					src/qbittorrent.app
 | 
				
			||||||
@@ -38,6 +34,3 @@ config.status
 | 
				
			|||||||
src/icons/qbt-theme/build-icons/node_modules/
 | 
					src/icons/qbt-theme/build-icons/node_modules/
 | 
				
			||||||
src/icons/skin/build-icons/node_modules/
 | 
					src/icons/skin/build-icons/node_modules/
 | 
				
			||||||
src/icons/skin/build-icons/icons/*.png
 | 
					src/icons/skin/build-icons/icons/*.png
 | 
				
			||||||
 | 
					 | 
				
			||||||
# CMake build directory
 | 
					 | 
				
			||||||
build/
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,110 +0,0 @@
 | 
				
			|||||||
repos:
 | 
					 | 
				
			||||||
  - repo: local
 | 
					 | 
				
			||||||
    hooks:
 | 
					 | 
				
			||||||
      - id: check-grid-order
 | 
					 | 
				
			||||||
        name: Check items order in grid layouts
 | 
					 | 
				
			||||||
        entry: .github/workflows/helper/pre-commit/check_grid_items_order.py
 | 
					 | 
				
			||||||
        language: script
 | 
					 | 
				
			||||||
        files: \.ui$
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - id: check-translation-tag
 | 
					 | 
				
			||||||
        name: Check newline characters in <translation> tag
 | 
					 | 
				
			||||||
        entry: .github/workflows/helper/pre-commit/check_translation_tag.py
 | 
					 | 
				
			||||||
        language: script
 | 
					 | 
				
			||||||
        exclude: |
 | 
					 | 
				
			||||||
          (?x)^(
 | 
					 | 
				
			||||||
            src/lang/.*
 | 
					 | 
				
			||||||
          )$
 | 
					 | 
				
			||||||
        types_or:
 | 
					 | 
				
			||||||
          - ts
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  - repo: https://github.com/pre-commit/pre-commit-hooks.git
 | 
					 | 
				
			||||||
    rev: v5.0.0
 | 
					 | 
				
			||||||
    hooks:
 | 
					 | 
				
			||||||
    - id: check-json
 | 
					 | 
				
			||||||
      name: Check JSON files
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    - id: check-yaml
 | 
					 | 
				
			||||||
      name: Check YAML files
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    - id: fix-byte-order-marker
 | 
					 | 
				
			||||||
      name: Check file encoding (UTF-8 without BOM)
 | 
					 | 
				
			||||||
      exclude: |
 | 
					 | 
				
			||||||
        (?x)^(
 | 
					 | 
				
			||||||
          src/base/unicodestrings.h
 | 
					 | 
				
			||||||
        )$
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    - id: mixed-line-ending
 | 
					 | 
				
			||||||
      name: Check line ending character (LF)
 | 
					 | 
				
			||||||
      args: ["--fix=lf"]
 | 
					 | 
				
			||||||
      exclude: |
 | 
					 | 
				
			||||||
        (?x)^(
 | 
					 | 
				
			||||||
          src/webui/www/private/css/lib/.* |
 | 
					 | 
				
			||||||
          src/webui/www/private/scripts/lib/.* |
 | 
					 | 
				
			||||||
          dist/windows/license.txt |
 | 
					 | 
				
			||||||
          test/testdata/crlf.txt
 | 
					 | 
				
			||||||
        )$
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    - id: end-of-file-fixer
 | 
					 | 
				
			||||||
      name: Check trailing newlines
 | 
					 | 
				
			||||||
      exclude: |
 | 
					 | 
				
			||||||
        (?x)^(
 | 
					 | 
				
			||||||
          configure |
 | 
					 | 
				
			||||||
          src/webui/www/private/css/lib/.* |
 | 
					 | 
				
			||||||
          src/webui/www/private/scripts/lib/.* |
 | 
					 | 
				
			||||||
          test/testdata/crlf.txt
 | 
					 | 
				
			||||||
        )$
 | 
					 | 
				
			||||||
      exclude_types:
 | 
					 | 
				
			||||||
        - svg
 | 
					 | 
				
			||||||
        - ts
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    - id: trailing-whitespace
 | 
					 | 
				
			||||||
      name: Check trailing whitespaces
 | 
					 | 
				
			||||||
      exclude: |
 | 
					 | 
				
			||||||
        (?x)^(
 | 
					 | 
				
			||||||
          src/webui/www/private/css/lib/.* |
 | 
					 | 
				
			||||||
          src/webui/www/private/scripts/lib/.*
 | 
					 | 
				
			||||||
        )$
 | 
					 | 
				
			||||||
      exclude_types:
 | 
					 | 
				
			||||||
        - ts
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  - repo: https://github.com/codespell-project/codespell.git
 | 
					 | 
				
			||||||
    rev: v2.4.0
 | 
					 | 
				
			||||||
    hooks:
 | 
					 | 
				
			||||||
    - id: codespell
 | 
					 | 
				
			||||||
      name: Check spelling (codespell)
 | 
					 | 
				
			||||||
      args: ["--ignore-words-list", "additionals,categor,curren,fo,ist,ket,notin,searchin,sectionin,superseeding,te,ths"]
 | 
					 | 
				
			||||||
      exclude: |
 | 
					 | 
				
			||||||
        (?x)^(
 | 
					 | 
				
			||||||
          .*\.desktop |
 | 
					 | 
				
			||||||
          .*\.qrc |
 | 
					 | 
				
			||||||
          Changelog |
 | 
					 | 
				
			||||||
          dist/windows/installer-translations/.* |
 | 
					 | 
				
			||||||
          src/base/3rdparty/.* |
 | 
					 | 
				
			||||||
          src/searchengine/nova3/socks.py |
 | 
					 | 
				
			||||||
          src/webui/www/private/scripts/lib/.*
 | 
					 | 
				
			||||||
        )$
 | 
					 | 
				
			||||||
      exclude_types:
 | 
					 | 
				
			||||||
        - ts
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  - repo: https://github.com/crate-ci/typos.git
 | 
					 | 
				
			||||||
    rev: v1.29.4
 | 
					 | 
				
			||||||
    hooks:
 | 
					 | 
				
			||||||
    - id: typos
 | 
					 | 
				
			||||||
      name: Check spelling (typos)
 | 
					 | 
				
			||||||
      args: ["--config", ".github/workflows/helper/pre-commit/.typos.toml"]
 | 
					 | 
				
			||||||
      exclude: |
 | 
					 | 
				
			||||||
        (?x)^(
 | 
					 | 
				
			||||||
          .*\.asc |
 | 
					 | 
				
			||||||
          .*\.desktop |
 | 
					 | 
				
			||||||
          .*\.qrc |
 | 
					 | 
				
			||||||
          \.pre-commit-config\.yaml |
 | 
					 | 
				
			||||||
          Changelog |
 | 
					 | 
				
			||||||
          dist/windows/installer-translations/.* |
 | 
					 | 
				
			||||||
          src/base/3rdparty/.* |
 | 
					 | 
				
			||||||
          src/searchengine/nova3/socks.py |
 | 
					 | 
				
			||||||
          src/webui/www/private/scripts/lib/.*
 | 
					 | 
				
			||||||
        )$
 | 
					 | 
				
			||||||
      exclude_types:
 | 
					 | 
				
			||||||
        - svg
 | 
					 | 
				
			||||||
        - ts
 | 
					 | 
				
			||||||
							
								
								
									
										203
									
								
								.travis.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										203
									
								
								.travis.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,203 @@
 | 
				
			|||||||
 | 
					language: cpp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					os:
 | 
				
			||||||
 | 
					  - linux
 | 
				
			||||||
 | 
					  - osx
 | 
				
			||||||
 | 
					osx_image: xcode7.3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					env:
 | 
				
			||||||
 | 
					  matrix:
 | 
				
			||||||
 | 
					    # Uncomment when Travis upgraded "Ubuntu 12.04 LTS" to a newer version whose repo will have a more up-to-date libtorrent package
 | 
				
			||||||
 | 
					    #- lt_branch=dist gui=true
 | 
				
			||||||
 | 
					    #- lt_branch=dist gui=false
 | 
				
			||||||
 | 
					    - lt_branch=RC_1_0 gui=true build_system=cmake
 | 
				
			||||||
 | 
					    - lt_branch=RC_1_0 gui=false build_system=cmake
 | 
				
			||||||
 | 
					    - lt_branch=RC_1_0 gui=true build_system=qmake
 | 
				
			||||||
 | 
					    - lt_branch=RC_1_0 gui=false build_system=qmake
 | 
				
			||||||
 | 
					  global:
 | 
				
			||||||
 | 
					    - secure: "OI9CUjj4lTb0HwwIZU5PbECU3hLlAL6KC8KsbwohG8/O3j5fLcnmDsK4Ad9us5cC39sS11Jcd1kDP2qRcCuST/glVNhLkcjKkiQerOfd5nQ/qL4JYfz/1mfP5mdpz9jHKzpLUIG+TXkbSTjP6VVmsb5KPT+3pKEdRFZB+Pu9+J8="
 | 
				
			||||||
 | 
					    - coverity_branch: coverity_scan
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					matrix:
 | 
				
			||||||
 | 
					  allow_failures:
 | 
				
			||||||
 | 
					    - env: lt_branch=RC_1_0 gui=true build_system=cmake
 | 
				
			||||||
 | 
					    - env: lt_branch=RC_1_0 gui=false build_system=cmake
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					branches:
 | 
				
			||||||
 | 
					  except:
 | 
				
			||||||
 | 
					    - search_encoding_windows
 | 
				
			||||||
 | 
					    - v2_9_x
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					notifications:
 | 
				
			||||||
 | 
					  email:
 | 
				
			||||||
 | 
					    on_success: change
 | 
				
			||||||
 | 
					    on_failure: change
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					cache:
 | 
				
			||||||
 | 
					  ccache: true
 | 
				
			||||||
 | 
					  directories:
 | 
				
			||||||
 | 
					    - $HOME/hombebrew_cache
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# opt-in Ubuntu Trusty
 | 
				
			||||||
 | 
					dist: trusty
 | 
				
			||||||
 | 
					# container-based builds
 | 
				
			||||||
 | 
					sudo: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					addons:
 | 
				
			||||||
 | 
					  coverity_scan:
 | 
				
			||||||
 | 
					    project:
 | 
				
			||||||
 | 
					      name: "qbittorrent/qBittorrent"
 | 
				
			||||||
 | 
					      description: "Build submitted via Travis CI"
 | 
				
			||||||
 | 
					    build_command_prepend: "./bootstrap.sh && ./configure $qbtconf"
 | 
				
			||||||
 | 
					    build_command: make
 | 
				
			||||||
 | 
					    branch_pattern: $coverity_branch
 | 
				
			||||||
 | 
					    notification_email: sledgehammer999@qbittorrent.org
 | 
				
			||||||
 | 
					  apt:
 | 
				
			||||||
 | 
					    sources:
 | 
				
			||||||
 | 
					      # sources list: https://github.com/travis-ci/apt-source-whitelist/blob/master/ubuntu.json
 | 
				
			||||||
 | 
					      - ubuntu-toolchain-r-test
 | 
				
			||||||
 | 
					      #- boost-latest
 | 
				
			||||||
 | 
					      - sourceline: 'ppa:qbittorrent-team/qbittorrent-stable'
 | 
				
			||||||
 | 
					      - sourceline: 'ppa:beineri/opt-qt551-trusty'
 | 
				
			||||||
 | 
					      - sourceline: 'ppa:adrozdoff/cmake'
 | 
				
			||||||
 | 
					    packages:
 | 
				
			||||||
 | 
					      # packages list: https://github.com/travis-ci/apt-package-whitelist/blob/master/ubuntu-precise
 | 
				
			||||||
 | 
					      - [autoconf, automake, colormake]
 | 
				
			||||||
 | 
					      - [cmake, ninja-build]
 | 
				
			||||||
 | 
					      - libssl-dev
 | 
				
			||||||
 | 
					      - [libboost-dev, libboost-system-dev]
 | 
				
			||||||
 | 
					      - libtorrent-rasterbar-dev
 | 
				
			||||||
 | 
					      - [qt55base, qt55svg, qt55tools]
 | 
				
			||||||
 | 
					      - [gcc-6, g++-6]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					before_install:
 | 
				
			||||||
 | 
					  # only allow specific build for coverity scan, others will stop
 | 
				
			||||||
 | 
					  - if [ "$TRAVIS_BRANCH" = "$coverity_branch" ] && ! [ "$TRAVIS_OS_NAME" = "linux" -a "$lt_branch" = "RC_1_0" -a "$gui" = true -a "$build_system" = "qmake" ]; then exit ; fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - shopt -s expand_aliases
 | 
				
			||||||
 | 
					  - alias make="colormake -j3" # Using nprocs/2 sometimes may fail (gcc is killed by system)
 | 
				
			||||||
 | 
					  - qbt_path="$HOME/qbt_install"
 | 
				
			||||||
 | 
					  - |
 | 
				
			||||||
 | 
					    if [ "$TRAVIS_OS_NAME" = "linux" ]; then
 | 
				
			||||||
 | 
					      qbtconf="$qbtconf --prefix="$qbt_path" PKG_CONFIG_PATH=/opt/qt55/lib/pkgconfig:$PKG_CONFIG_PATH"
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					      qbtconf="$qbtconf --prefix="$qbt_path""
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # options for specific branches
 | 
				
			||||||
 | 
					  - if [ "$gui" = false ]; then qbtconf="$qbtconf --disable-gui" ; fi
 | 
				
			||||||
 | 
					  - |
 | 
				
			||||||
 | 
					    if [ "$TRAVIS_OS_NAME" = "linux" ]; then
 | 
				
			||||||
 | 
					      # setup virtual display for after_success target
 | 
				
			||||||
 | 
					      if [ "$gui" = true ]; then export "DISPLAY=:99.0" && /sbin/start-stop-daemon --start --quiet --pidfile /tmp/custom_xvfb_99.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :99 -ac -screen 0 1280x1024x16 ; fi ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      # Qt 5
 | 
				
			||||||
 | 
					      PATH=/opt/qt55/bin:${PATH}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      if [ "$build_system" = "cmake" ]; then
 | 
				
			||||||
 | 
					          COMPILER_VERSION=6
 | 
				
			||||||
 | 
					          export CXX="${CXX}-${COMPILER_VERSION}" CC="${CC}-${COMPILER_VERSION}"
 | 
				
			||||||
 | 
					      fi
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # print settings
 | 
				
			||||||
 | 
					  - echo $lt_branch
 | 
				
			||||||
 | 
					  - echo $gui
 | 
				
			||||||
 | 
					  - echo $build_system
 | 
				
			||||||
 | 
					  - echo $ltconf
 | 
				
			||||||
 | 
					  - echo $qbtconf
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					install:
 | 
				
			||||||
 | 
					  #- |
 | 
				
			||||||
 | 
					    #if [ "$TRAVIS_OS_NAME" = "linux" ]; then
 | 
				
			||||||
 | 
					      # build libtorrent from source
 | 
				
			||||||
 | 
					      #if [ "$lt_branch" != "dist" ]; then
 | 
				
			||||||
 | 
					        #cd "$HOME" && pwd && git clone --depth 1 https://github.com/arvidn/libtorrent.git --branch $lt_branch
 | 
				
			||||||
 | 
					        #cd libtorrent && ./autotool.sh && ./configure $ltconf && make install
 | 
				
			||||||
 | 
					      #fi
 | 
				
			||||||
 | 
					    #fi
 | 
				
			||||||
 | 
					  - |
 | 
				
			||||||
 | 
					    if [ "$TRAVIS_OS_NAME" = "osx" ]; then
 | 
				
			||||||
 | 
					      # dependencies
 | 
				
			||||||
 | 
					      brew update > /dev/null
 | 
				
			||||||
 | 
					      brew outdated "pkg-config" || brew upgrade "pkg-config"
 | 
				
			||||||
 | 
					      brew install colormake ccache zlib qt
 | 
				
			||||||
 | 
					      PATH="/usr/local/opt/ccache/libexec:$PATH"
 | 
				
			||||||
 | 
					      brew link --force zlib qt
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      wget https://builds.shiki.hu/homebrew/version
 | 
				
			||||||
 | 
					      if ! cmp --quiet "version" "$HOME/hombebrew_cache/version" ; then
 | 
				
			||||||
 | 
					        echo "Cached files are different from server. Downloading new ones."
 | 
				
			||||||
 | 
					        # First delete old files
 | 
				
			||||||
 | 
					        rm -r "$HOME/hombebrew_cache"
 | 
				
			||||||
 | 
					        mkdir "$HOME/hombebrew_cache"
 | 
				
			||||||
 | 
					        cp "version" $HOME/hombebrew_cache
 | 
				
			||||||
 | 
					        cd "$HOME/hombebrew_cache"
 | 
				
			||||||
 | 
					        wget https://builds.shiki.hu/homebrew/libtorrent-rasterbar.rb
 | 
				
			||||||
 | 
					        wget https://builds.shiki.hu/homebrew/libtorrent-rasterbar-1.1.7+git20180422.3ede0b9c20+patched-configure.el_capitan.bottle.tar.gz
 | 
				
			||||||
 | 
					      fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      # Copy custom libtorrent bottle to homebrew's cache so it can find and install it
 | 
				
			||||||
 | 
					      # Also install our custom libtorrent formula by passing the local path to it
 | 
				
			||||||
 | 
					      # These 2 files are restored from Travis' cache.
 | 
				
			||||||
 | 
					      cp "$HOME/hombebrew_cache/libtorrent-rasterbar-1.1.7+git20180422.3ede0b9c20+patched-configure.el_capitan.bottle.tar.gz" "$(brew --cache)"
 | 
				
			||||||
 | 
					      brew install "$HOME/hombebrew_cache/libtorrent-rasterbar.rb"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      if [ "$build_system" = "cmake" ]; then
 | 
				
			||||||
 | 
					        brew outdated cmake || brew upgrade cmake
 | 
				
			||||||
 | 
					        brew install ninja
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        ln -s /usr/local/opt/qt/mkspecs /usr/local/mkspecs
 | 
				
			||||||
 | 
					        ln -s /usr/local/opt/qt/plugins /usr/local/plugins
 | 
				
			||||||
 | 
					      fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      MY_CMAKE_OPENSSL_HINT="-DOPENSSL_ROOT_DIR=/usr/local/opt/openssl/"
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					  - |
 | 
				
			||||||
 | 
					    if [ "$TRAVIS_BRANCH" != "$coverity_branch" ]; then
 | 
				
			||||||
 | 
					      export use_ccache=true
 | 
				
			||||||
 | 
					      ccache -V && ccache --show-stats && ccache --zero-stats
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					script:
 | 
				
			||||||
 | 
					  - if [ "$TRAVIS_BRANCH" = "$coverity_branch" ]; then exit ; fi # skip usual build when running coverity scan
 | 
				
			||||||
 | 
					  - |
 | 
				
			||||||
 | 
					    cd "$TRAVIS_BUILD_DIR"
 | 
				
			||||||
 | 
					    if [ "$build_system" = "cmake" ]; then
 | 
				
			||||||
 | 
					      mkdir build
 | 
				
			||||||
 | 
					      cd build
 | 
				
			||||||
 | 
					      cmake -DGUI=${gui} -DCMAKE_INSTALL_PREFIX="$qbt_path" "$MY_CMAKE_OPENSSL_HINT" \
 | 
				
			||||||
 | 
					        -G "Ninja" -DCMAKE_INSTALL_RPATH_USE_LINK_PATH=TRUE ..
 | 
				
			||||||
 | 
					      BUILD_TOOL="ninja"
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					    if [ "$build_system" = "qmake" ]; then
 | 
				
			||||||
 | 
					      if [ "$TRAVIS_OS_NAME" = "osx" ]; then
 | 
				
			||||||
 | 
					        # For some reason for RC_1_1 we need to also specify the OpenSSL compiler/linker flags
 | 
				
			||||||
 | 
					        # Homebrew doesn't symlink OpenSSL for security reasons
 | 
				
			||||||
 | 
					        ./bootstrap.sh && ./configure $qbtconf CXXFLAGS="$(PKG_CONFIG_PATH="/usr/local/opt/openssl/lib/pkgconfig:$PKG_CONFIG_PATH" pkg-config --cflags openssl)" LDFLAGS="$(PKG_CONFIG_PATH="/usr/local/opt/openssl/lib/pkgconfig:$PKG_CONFIG_PATH" pkg-config --libs openssl)"
 | 
				
			||||||
 | 
					        sed -i "" -e "s/^\(CC.*&&\).*$/\1 $CC/" src/Makefile  # workaround for Qt & ccache: https://bugreports.qt.io/browse/QTBUG-31034
 | 
				
			||||||
 | 
					        sed -i "" -e "s/^\(CXX.*&&\).*$/\1 $CXX/" src/Makefile
 | 
				
			||||||
 | 
					        sed -i "" -e 's/^\(CXXFLAGS.*\)$/\1 -Wno-unused-local-typedefs -Wno-inconsistent-missing-override/' src/Makefile
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
					        ./bootstrap.sh && ./configure $qbtconf
 | 
				
			||||||
 | 
					      fi
 | 
				
			||||||
 | 
					      BUILD_TOOL="make"
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					  - $BUILD_TOOL && $BUILD_TOOL install
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					after_success:
 | 
				
			||||||
 | 
					  - if [ "$gui" = true ]; then qbt_exe="qbittorrent" ; else qbt_exe="qbittorrent-nox" ; fi
 | 
				
			||||||
 | 
					  - if [ "$TRAVIS_OS_NAME" = "linux" ]; then cd "$qbt_path/bin" ; fi
 | 
				
			||||||
 | 
					  - |
 | 
				
			||||||
 | 
					    if [ "$TRAVIS_OS_NAME" = "osx" ]; then
 | 
				
			||||||
 | 
					      if [ "$build_system" = "qmake" ]; then
 | 
				
			||||||
 | 
					        macdeployqt "$TRAVIS_BUILD_DIR/src/$qbt_exe.app"
 | 
				
			||||||
 | 
					        cd "$TRAVIS_BUILD_DIR/src/$qbt_exe.app/Contents/MacOS"
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
					        cd "$qbt_path/$qbt_exe.app/Contents/MacOS"
 | 
				
			||||||
 | 
					      fi
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					  - ./$qbt_exe --version
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					after_script:
 | 
				
			||||||
 | 
					  - if [ "$use_ccache" = true ]; then ccache --show-stats ; fi
 | 
				
			||||||
							
								
								
									
										29
									
								
								.tx/config
									
									
									
									
									
								
							
							
						
						
									
										29
									
								
								.tx/config
									
									
									
									
									
								
							@@ -1,24 +1,19 @@
 | 
				
			|||||||
[main]
 | 
					[main]
 | 
				
			||||||
host = https://www.transifex.com
 | 
					host = https://www.transifex.com
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[o:sledgehammer999:p:qbittorrent:r:qbittorrent_v51x]
 | 
					[qbittorrent.qbittorrent_master]
 | 
				
			||||||
file_filter  = src/lang/qbittorrent_<lang>.ts
 | 
					file_filter = src/lang/qbittorrent_<lang>.ts
 | 
				
			||||||
source_file  = src/lang/qbittorrent_en.ts
 | 
					lang_map = pt: pt_PT
 | 
				
			||||||
source_lang  = en
 | 
					source_file = src/lang/qbittorrent_en.ts
 | 
				
			||||||
type         = QT
 | 
					source_lang = en
 | 
				
			||||||
 | 
					type = QT
 | 
				
			||||||
minimum_perc = 23
 | 
					minimum_perc = 23
 | 
				
			||||||
lang_map     = pt: pt_PT, zh: zh_CN
 | 
					mode = developer
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[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
 | 
					 | 
				
			||||||
type         = QT
 | 
					 | 
				
			||||||
minimum_perc = 23
 | 
					 | 
				
			||||||
lang_map     = pt: pt_PT, zh: zh_CN
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
[o:sledgehammer999:p:qbittorrent:r:qbittorrentdesktop_master]
 | 
					[qbittorrent.qbittorrentdesktop_master]
 | 
				
			||||||
source_file  = dist/unix/org.qbittorrent.qBittorrent.desktop
 | 
					source_file = src/icons/qBittorrent.desktop
 | 
				
			||||||
source_lang  = en
 | 
					source_lang = en
 | 
				
			||||||
type         = DESKTOP
 | 
					type = DESKTOP
 | 
				
			||||||
minimum_perc = 23
 | 
					minimum_perc = 23
 | 
				
			||||||
 | 
					mode = developer
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										99
									
								
								AUTHORS
									
									
									
									
									
								
							
							
						
						
									
										99
									
								
								AUTHORS
									
									
									
									
									
								
							@@ -17,78 +17,81 @@ Contributors:
 | 
				
			|||||||
* Nick Tiskov <daymansmail@gmail.com>
 | 
					* Nick Tiskov <daymansmail@gmail.com>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Code from other projects:
 | 
					Code from other projects:
 | 
				
			||||||
* files src/app/qtlocalpeer/*
 | 
					* files src/qtsingleapplication/* src/lineedit/*
 | 
				
			||||||
  copyright: Nokia Corporation
 | 
					  copyright: Nokia Corporation
 | 
				
			||||||
  license: mixed
 | 
					  license: LGPL
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* files src/gui/lineedit.*
 | 
					* files src/ico.cpp src/ico.h
 | 
				
			||||||
  copyright: Trolltech ASA <info@trolltech.com>
 | 
					  copyright: Malte Starostik <malte@kde.org>
 | 
				
			||||||
  license: custom
 | 
					  license: LGPL
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* files src/search_engine/socks.py
 | 
					* files src/search_engine/socks.py
 | 
				
			||||||
  copyright: Dan Haim <negativeiq@users.sourceforge.net>
 | 
					  copyright: Dan Haim <negativeiq@users.sourceforge.net>
 | 
				
			||||||
  license: BSD
 | 
					  license: BSD
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* files src/webui/www/private/css/lib/vanillaSelectBox.css src/webui/www/private/scripts/lib/vanillaSelectBox.js
 | 
					* file src/stacktrace_win.h
 | 
				
			||||||
  copyright: Philippe Meyer <pmg.meyer@gmail.com>
 | 
					  copyright: Quassel Project
 | 
				
			||||||
  license: MIT
 | 
					  license: GPLv2/3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Images Authors:
 | 
					Images Authors:
 | 
				
			||||||
* files: src/icons/qbittorrent-tray.svg
 | 
					* files: src/icons/skin/qbittorrent-tray.svg (and related pngs)
 | 
				
			||||||
  copyright: Provided by HVS <hvs linuxmail org> (raster first proposal) and Atif Afzal(@atfzl github) <atif5801@gmail.com> (vectorized and modified)
 | 
					  copyright: Provided by HVS <hvs linuxmail org> (raster first proposal) and Atif Afzal(@atfzl github) <atif5801@gmail.com> (vectorized and modified)
 | 
				
			||||||
  license: GPLv2+
 | 
					  license: GPLv2+
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* files: src/qbittorrent_file.ico src/icons/fileicon.svg
 | 
					* files: src/qbittorrent_file.ico src/icons/fileicon.svg
 | 
				
			||||||
  copyright: 'unknown.svg' (LGPLv3+) from Oxygen Icon Theme was used as base which was slightly modified and 'qbittorrent-tray.svg' (GPLv2+) was overlaid above it.
 | 
					  copyright: 'uknown.svg' (LGPLv3+) from Oxygen Icon Theme was used as base which was slightly modified and 'qbittorrent-tray.svg' (GPLv2+) was overlayed above it.
 | 
				
			||||||
  license: GPLv3+
 | 
					  license: GPLv3+
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* files: src/icons/flags/*.svg
 | 
					* files: src/icons/*.png
 | 
				
			||||||
  copyright: lipis/flag-icons
 | 
					  copyright: Gnome Icon Theme
 | 
				
			||||||
  license: MIT
 | 
					  license: GPLv2
 | 
				
			||||||
  url: https://github.com/lipis/flag-icons/
 | 
					  url: http://ftp.acc.umu.se/pub/GNOME/sources/gnome-icon-theme
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* file: src/webui/www/private/images/tabs.gif
 | 
					* files: src/oxygen/*.png
 | 
				
			||||||
 | 
					  copyright: Oxygen Icon Theme (KDE)
 | 
				
			||||||
 | 
					  license: LGPL
 | 
				
			||||||
 | 
					  url: http://www.oxygen-icons.org
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* files: src/icons/flags/*.svg
 | 
				
			||||||
 | 
					  copyright: lipis/flag-icon-css
 | 
				
			||||||
 | 
					  license: MIT
 | 
				
			||||||
 | 
					  url: https://github.com/lipis/flag-icon-css/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* files: src/icons/skin/*.png
 | 
				
			||||||
 | 
					  files: src/menuicons/YYxYY/*.png
 | 
				
			||||||
 | 
					  copyright: Mateusz Tobola <tobejodok@qbittorrent.org>
 | 
				
			||||||
 | 
					  license: GPLv2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* file: src/icons/skin/tabs.gif
 | 
				
			||||||
  copyright: Greg Houston <gregory.houston@gmail.com>
 | 
					  copyright: Greg Houston <gregory.houston@gmail.com>
 | 
				
			||||||
  license: MIT
 | 
					  license: MIT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* file: src/icons/qbittorrent-tray-dark.svg src/icons/qbittorrent-tray-light.svg
 | 
					* file: src/icons/skin/qbittorrent_mono*
 | 
				
			||||||
  copyright: Daniel Eguren <deguren@gmail.com>
 | 
					  copyright: Daniel Eguren <deguren@gmail.com>
 | 
				
			||||||
  modified by: now-im <now-im.d8gcu@simplelogin.com> (@now-im)
 | 
					 | 
				
			||||||
  license: LGPL
 | 
					  license: LGPL
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* folder: src/icons/
 | 
					* file: src/search_engine/engines/btjunkie.png
 | 
				
			||||||
  files: application-rss+xml.svg, application-x-mswinurl.svg, connected.svg, disconnected.svg, checked-completed.svg, configure.svg,
 | 
					  copyright: Downloaded from btjunkie.org
 | 
				
			||||||
         edit-copy.svg, edit-rename.svg, folder-documents.svg, folder-new.svg, folder-remote.svg, go-bottom.svg, go-down.svg, go-top.svg,
 | 
					 | 
				
			||||||
         go-up.svg, hash.svg, inode-directory.svg, insert-link.svg, kt-magnet.svg, media-playback-pause.svg, media-playback-start.svg,
 | 
					 | 
				
			||||||
         media-seek-forward.svg, network-connect.svg, object-locked.svg, queued.svg, ratio.svg, reannounce.svg, slow_off.svg, slow.svg,
 | 
					 | 
				
			||||||
         speedometer.svg, system-log-out.svg, tags.svg, task-complete.svg, task-reject.svg, tracker-error.svg, tracker-warning.svg,
 | 
					 | 
				
			||||||
         trackerless.svg, trackers.svg, view-categories.svg
 | 
					 | 
				
			||||||
  copyright: now-im <now-im.d8gcu@simplelogin.com> (@now-im) modified from La-Capitaine icon theme (https://github.com/keeferrourke/la-capitaine-icon-theme)
 | 
					 | 
				
			||||||
  license: GPLv3+
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
* folder: src/icons/
 | 
					* file: src/search_engine/engines/isohunt.png
 | 
				
			||||||
  files: application-exit.svg, collapse.svg, dialog-warning.svg, edit-find-user.svg, edit-find.svg, filter-all.svg, firewalled.svg,
 | 
					  copyright: Downloaded from isohunt.com
 | 
				
			||||||
         help-about.svg, help-contents.svg, ip-blocked.svg, list-remove.svg, loading.svg, mail-folder-inbox.svg, name.svg, network-server.svg,
 | 
					 | 
				
			||||||
         office-chart-line.svg, plugins.svg, preferences-desktop.svg, preferences-other.svg, preferences-system-network.svg, security-high.svg,
 | 
					 | 
				
			||||||
         security-low.svg, set-location.svg, torrent-creator.svg, user-group-delete.svg, user-group-new.svg, view-preview.svg, view-refresh.svg,
 | 
					 | 
				
			||||||
         view-statistics.svg, wallet-open.svg, webuiapplication-exit.svg, collapse.svg, dialog-warning.svg, edit-find-user.svg, edit-find.svg,
 | 
					 | 
				
			||||||
         filter-all.svg, firewalled.svg, help-about.svg, help-contents.svg, ip-blocked.svg, list-remove.svg, loading.svg, mail-folder-inbox.svg,
 | 
					 | 
				
			||||||
         name.svg, network-server.svg, office-chart-line.svg, plugins.svg, preferences-desktop.svg, preferences-other.svg,
 | 
					 | 
				
			||||||
         preferences-system-network.svg, security-high.svg, security-low.svg, set-location.svg, torrent-creator.svg, user-group-delete.svg,
 | 
					 | 
				
			||||||
         user-group-new.svg, view-preview.svg, view-refresh.svg, view-statistics.svg, wallet-open.svg, webui.svg
 | 
					 | 
				
			||||||
  copyright: now-im <now-im.d8gcu@simplelogin.com> (@now-im) modified from Ionicons icon theme (https://github.com/ionic-team/ionicons)
 | 
					 | 
				
			||||||
  license: MIT
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
* folder: src/icons/
 | 
					* file: src/search_engine/engines/mininova.png
 | 
				
			||||||
  files: force-recheck.svg
 | 
					  copyright: Downloaded from mininova.org
 | 
				
			||||||
  copyright: now-im <now-im.d8gcu@simplelogin.com> (@now-im) modified from Font-Awesome icon theme (https://github.com/FortAwesome/Font-Awesome)
 | 
					 | 
				
			||||||
  license: CC BY 4.0 License
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
* folder: src/icons/
 | 
					* file: src/search_engine/engines/piratebay.png
 | 
				
			||||||
  files: downloading.svg, edit-clear.svg, error.svg, filter-active.svg, filter-inactive.svg, filter-stalled.svg, kt-set-max-download-speed.svg,
 | 
					  copyright: Downloaded from thepiratebay.org
 | 
				
			||||||
         kt-set-max-upload-speed.svg, list-add.svg, preferences-web-browser-cookies.svg, stalledDL.svg, stalledUP.svg
 | 
					
 | 
				
			||||||
  copyright: now-im <now-im.d8gcu@simplelogin.com> (@now-im)
 | 
					* file: src/search_engine/engines/torrentreactor.png
 | 
				
			||||||
  license: BSD 2-Clause License
 | 
					  copyright: Downloaded from torrentreactor.net
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* file: src/icons/oxygen/checked.png
 | 
				
			||||||
 | 
					  copyright: Victor Buinsky <allok.victor@gmail.com>
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					* file: src/icons/skin/ratio.png
 | 
				
			||||||
 | 
					  copyright: Fatcow Web Hosting
 | 
				
			||||||
 | 
					  license: Creative Commons Attribution 3.0 License
 | 
				
			||||||
 | 
					  url: http://www.fatcow.com/free-icons
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Translations authors:
 | 
					Translations authors:
 | 
				
			||||||
* files: src/lang/*.ts
 | 
					* files: src/lang/*.ts
 | 
				
			||||||
@@ -116,7 +119,7 @@ Translations authors:
 | 
				
			|||||||
  - German: Niels Hoffmann (zentralmaschine@users.sourceforge.net)
 | 
					  - German: Niels Hoffmann (zentralmaschine@users.sourceforge.net)
 | 
				
			||||||
  - Greek: Tsvetan Bankov (emerge_life@users.sourceforge.net), Stephanos Antaris (santaris@csd.auth.gr), sledgehammer999(hammered999@gmail.com) and Γιάννης Ανθυμίδης Evropi(Transifex)
 | 
					  - Greek: Tsvetan Bankov (emerge_life@users.sourceforge.net), Stephanos Antaris (santaris@csd.auth.gr), sledgehammer999(hammered999@gmail.com) and Γιάννης Ανθυμίδης Evropi(Transifex)
 | 
				
			||||||
  - Hebrew: David Deutsch (d.deffo@gmail.com)
 | 
					  - Hebrew: David Deutsch (d.deffo@gmail.com)
 | 
				
			||||||
  - Hungarian: Majoros Péter
 | 
					  - Hungarian: Majoros Péter (majoros.j.p@t-online.hu)
 | 
				
			||||||
  - Italian: bovirus (bovirus@live.it) and Matteo Sechi (bu17714@gmail.com)
 | 
					  - Italian: bovirus (bovirus@live.it) and Matteo Sechi (bu17714@gmail.com)
 | 
				
			||||||
  - Japanese: Masato Hashimoto (cabezon.hashimoto@gmail.com)
 | 
					  - Japanese: Masato Hashimoto (cabezon.hashimoto@gmail.com)
 | 
				
			||||||
  - Korean: Jin Woo Sin (jin828sin@users.sourceforge.net)
 | 
					  - Korean: Jin Woo Sin (jin828sin@users.sourceforge.net)
 | 
				
			||||||
 
 | 
				
			|||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user