You've already forked qBittorrent
							
							
				mirror of
				https://github.com/qbittorrent/qBittorrent
				synced 2025-11-02 08:10:54 +01:00 
			
		
		
		
	Compare commits
	
		
			221 Commits
		
	
	
		
			release-4.
			...
			v4_2_x
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					2c65b79640 | ||
| 
						 | 
					1ef504631d | ||
| 
						 | 
					5468f10184 | ||
| 
						 | 
					5e249c4898 | ||
| 
						 | 
					c67d863c93 | ||
| 
						 | 
					6e375a38ef | ||
| 
						 | 
					0f6768f6ad | ||
| 
						 | 
					bdeb662cb0 | ||
| 
						 | 
					b9b06d5384 | ||
| 
						 | 
					6a174b594b | ||
| 
						 | 
					f7cd5ac7c7 | ||
| 
						 | 
					50f676c305 | ||
| 
						 | 
					7103ae73cd | ||
| 
						 | 
					7d4b8b010f | ||
| 
						 | 
					09bf033226 | ||
| 
						 | 
					4e62608802 | ||
| 
						 | 
					37b29bf91a | ||
| 
						 | 
					d67037136b | ||
| 
						 | 
					73292137b7 | ||
| 
						 | 
					56f7a4e803 | ||
| 
						 | 
					1cea6a25af | ||
| 
						 | 
					ebc704ef14 | ||
| 
						 | 
					a2a1a78f44 | ||
| 
						 | 
					3a54d574b0 | ||
| 
						 | 
					d0be71c225 | ||
| 
						 | 
					7c04b4acd8 | ||
| 
						 | 
					eda3747c08 | ||
| 
						 | 
					7d23ea1f80 | ||
| 
						 | 
					698ee94d0b | ||
| 
						 | 
					65d1b588d9 | ||
| 
						 | 
					eea693979a | ||
| 
						 | 
					654bf85a71 | ||
| 
						 | 
					8706a7c973 | ||
| 
						 | 
					439a2ef597 | ||
| 
						 | 
					c5a7aa7668 | ||
| 
						 | 
					e5bf83a594 | ||
| 
						 | 
					2a3e64933b | ||
| 
						 | 
					35f8af32a3 | ||
| 
						 | 
					37354a9e29 | ||
| 
						 | 
					7cb14e2a5b | ||
| 
						 | 
					4aae7266a5 | ||
| 
						 | 
					075245c915 | ||
| 
						 | 
					476707cc80 | ||
| 
						 | 
					7b0b5e3d7f | ||
| 
						 | 
					4142722303 | ||
| 
						 | 
					8ebb11f981 | ||
| 
						 | 
					80016db781 | ||
| 
						 | 
					a9f43bd5d2 | ||
| 
						 | 
					2f0c3f047a | ||
| 
						 | 
					f40a36ecb3 | ||
| 
						 | 
					a1ee1c0448 | ||
| 
						 | 
					939f83bdd5 | ||
| 
						 | 
					e98a887286 | ||
| 
						 | 
					29e9594859 | ||
| 
						 | 
					e881a42368 | ||
| 
						 | 
					67c6107892 | ||
| 
						 | 
					ea66edd1cb | ||
| 
						 | 
					cb444978ef | ||
| 
						 | 
					2794e883b6 | ||
| 
						 | 
					e86249a4e8 | ||
| 
						 | 
					6f45764629 | ||
| 
						 | 
					5250a8be42 | ||
| 
						 | 
					f3d878324b | ||
| 
						 | 
					43d9d16241 | ||
| 
						 | 
					5ad8f60ca1 | ||
| 
						 | 
					539fe7259e | ||
| 
						 | 
					6521d00d5b | ||
| 
						 | 
					e8010abc8b | ||
| 
						 | 
					99614aaa9d | ||
| 
						 | 
					56342c9c79 | ||
| 
						 | 
					efa748e853 | ||
| 
						 | 
					26ee009e72 | ||
| 
						 | 
					aff4065e42 | ||
| 
						 | 
					1c1cac2cba | ||
| 
						 | 
					ea3c360901 | ||
| 
						 | 
					39fe0025cd | ||
| 
						 | 
					3c17ad566c | ||
| 
						 | 
					97bfd13060 | ||
| 
						 | 
					3e91481672 | ||
| 
						 | 
					e131cd16a1 | ||
| 
						 | 
					a0976f4181 | ||
| 
						 | 
					5366bebb97 | ||
| 
						 | 
					f51cd36c29 | ||
| 
						 | 
					553f443fbc | ||
| 
						 | 
					97a92984c0 | ||
| 
						 | 
					f1489dc2bf | ||
| 
						 | 
					716aad9483 | ||
| 
						 | 
					8c91c03be2 | ||
| 
						 | 
					03e6b6e09d | ||
| 
						 | 
					75d3c03763 | ||
| 
						 | 
					f6b0abbd75 | ||
| 
						 | 
					03e8b9f74f | ||
| 
						 | 
					808f6ad9fb | ||
| 
						 | 
					4cf45aeebf | ||
| 
						 | 
					a0cf80c967 | ||
| 
						 | 
					56183ff5d9 | ||
| 
						 | 
					664dabdb7e | ||
| 
						 | 
					055d752c50 | ||
| 
						 | 
					3e4c2193fb | ||
| 
						 | 
					5c2b8d3e10 | ||
| 
						 | 
					ae9b8720af | ||
| 
						 | 
					30f2d11203 | ||
| 
						 | 
					9a69afb34a | ||
| 
						 | 
					923395b5c7 | ||
| 
						 | 
					9de819ea4a | ||
| 
						 | 
					21c8acd55c | ||
| 
						 | 
					709198d2f1 | ||
| 
						 | 
					87542b4f75 | ||
| 
						 | 
					566ecefbcf | ||
| 
						 | 
					41061f3c39 | ||
| 
						 | 
					703330c40d | ||
| 
						 | 
					5fdd069f66 | ||
| 
						 | 
					0ba8111c37 | ||
| 
						 | 
					5d206acb21 | ||
| 
						 | 
					7f1218a7c7 | ||
| 
						 | 
					c4ed7daf67 | ||
| 
						 | 
					5a09f996ed | ||
| 
						 | 
					dbde206ed4 | ||
| 
						 | 
					0947f93ad3 | ||
| 
						 | 
					f338d267bc | ||
| 
						 | 
					84aa63a3c5 | ||
| 
						 | 
					c2afc50c02 | ||
| 
						 | 
					f72e7c0a8f | ||
| 
						 | 
					575bde1d1d | ||
| 
						 | 
					d15fdf2dde | ||
| 
						 | 
					868fd53551 | ||
| 
						 | 
					66c2e70016 | ||
| 
						 | 
					89ee24fb3e | ||
| 
						 | 
					b02eb32806 | ||
| 
						 | 
					e162aef5be | ||
| 
						 | 
					837528c206 | ||
| 
						 | 
					b19153287b | ||
| 
						 | 
					544d3f9025 | ||
| 
						 | 
					7a463299ea | ||
| 
						 | 
					bbaa3a94c5 | ||
| 
						 | 
					d2834bd7fd | ||
| 
						 | 
					534549142e | ||
| 
						 | 
					5e73afa04e | ||
| 
						 | 
					6ad1ba1d35 | ||
| 
						 | 
					f978b3a002 | ||
| 
						 | 
					2f70d273b4 | ||
| 
						 | 
					2289bf4005 | ||
| 
						 | 
					0cd4900e92 | ||
| 
						 | 
					0ad8dc39e5 | ||
| 
						 | 
					60d133ca6d | ||
| 
						 | 
					000a726e20 | ||
| 
						 | 
					4006818520 | ||
| 
						 | 
					756bc3da54 | ||
| 
						 | 
					fbb01a36e6 | ||
| 
						 | 
					21922ed3b4 | ||
| 
						 | 
					43fe5214d2 | ||
| 
						 | 
					ab6079e0d5 | ||
| 
						 | 
					dc0b1ce227 | ||
| 
						 | 
					1db12e4421 | ||
| 
						 | 
					b160b56306 | ||
| 
						 | 
					0e6627b0f6 | ||
| 
						 | 
					33390bf463 | ||
| 
						 | 
					2a6ddffb22 | ||
| 
						 | 
					06c09f0113 | ||
| 
						 | 
					db258f7461 | ||
| 
						 | 
					81cec1930b | ||
| 
						 | 
					7444227c9a | ||
| 
						 | 
					07196571e8 | ||
| 
						 | 
					b083bd78e7 | ||
| 
						 | 
					e75a65d798 | ||
| 
						 | 
					e1a10a0375 | ||
| 
						 | 
					080c542953 | ||
| 
						 | 
					d7ab472363 | ||
| 
						 | 
					c4eb6eccaf | ||
| 
						 | 
					1c091cef76 | ||
| 
						 | 
					e37b08a879 | ||
| 
						 | 
					39018ef1db | ||
| 
						 | 
					c6cadb6800 | ||
| 
						 | 
					0898196a5f | ||
| 
						 | 
					4b40b80145 | ||
| 
						 | 
					6ade38400e | ||
| 
						 | 
					71ca3a5cc9 | ||
| 
						 | 
					2a3fc0ede1 | ||
| 
						 | 
					1b9fd85497 | ||
| 
						 | 
					c73f61c8d4 | ||
| 
						 | 
					4205e99479 | ||
| 
						 | 
					35c7e6bf2c | ||
| 
						 | 
					37bc47ee04 | ||
| 
						 | 
					c5dc361213 | ||
| 
						 | 
					0c83b3e3a3 | ||
| 
						 | 
					63c9e29419 | ||
| 
						 | 
					7389dc082f | ||
| 
						 | 
					1e05e6a842 | ||
| 
						 | 
					03550a0932 | ||
| 
						 | 
					85c1a9dbe0 | ||
| 
						 | 
					89de23718b | ||
| 
						 | 
					3760b63582 | ||
| 
						 | 
					621ee80539 | ||
| 
						 | 
					7589487c0c | ||
| 
						 | 
					ad7279953e | ||
| 
						 | 
					2bf340a89a | ||
| 
						 | 
					1d9df11e8c | ||
| 
						 | 
					118af03534 | ||
| 
						 | 
					596a71e03d | ||
| 
						 | 
					dab392645d | ||
| 
						 | 
					2d1fa9e154 | ||
| 
						 | 
					3a63fabe9c | ||
| 
						 | 
					3129712f03 | ||
| 
						 | 
					66baf64e17 | ||
| 
						 | 
					1bdeab398a | ||
| 
						 | 
					2bda2a37e3 | ||
| 
						 | 
					027b605fc0 | ||
| 
						 | 
					87e1c80e28 | ||
| 
						 | 
					2d3efbc711 | ||
| 
						 | 
					8e394e0cdb | ||
| 
						 | 
					0623c623d5 | ||
| 
						 | 
					307d8ec360 | ||
| 
						 | 
					5a518d2f35 | ||
| 
						 | 
					93fe20afcd | ||
| 
						 | 
					7f217110cd | ||
| 
						 | 
					4e7b33fadf | ||
| 
						 | 
					7926d1755f | ||
| 
						 | 
					3a13a3d5ca | ||
| 
						 | 
					caa8e1658a | ||
| 
						 | 
					890ccb7b84 | ||
| 
						 | 
					912b076707 | 
@@ -3,7 +3,7 @@ version: '{branch}-{build}'
 | 
				
			|||||||
# Do not build on tags (GitHub only)
 | 
					# Do not build on tags (GitHub only)
 | 
				
			||||||
skip_tags: true
 | 
					skip_tags: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
image: Visual Studio 2019
 | 
					image: Visual Studio 2017
 | 
				
			||||||
 | 
					
 | 
				
			||||||
branches:
 | 
					branches:
 | 
				
			||||||
  except:  # blacklist
 | 
					  except:  # blacklist
 | 
				
			||||||
@@ -13,8 +13,8 @@ environment:
 | 
				
			|||||||
  REPO_DIR: &REPO_DIR c:\qbittorrent
 | 
					  REPO_DIR: &REPO_DIR c:\qbittorrent
 | 
				
			||||||
  CACHE_DIR: &CACHE_DIR c:\qbt_cache
 | 
					  CACHE_DIR: &CACHE_DIR c:\qbt_cache
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  QBT_VER_URL: https://builds.shiki.hu/appveyor/version_64
 | 
					  QBT_VER_URL: https://builds.shiki.hu/appveyor/version
 | 
				
			||||||
  QBT_LIB_URL: https://builds.shiki.hu/appveyor/qbt_libraries_64.7z
 | 
					  QBT_LIB_URL: https://builds.shiki.hu/appveyor/qbt_libraries.7z
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# project directory
 | 
					# project directory
 | 
				
			||||||
clone_folder: *REPO_DIR
 | 
					clone_folder: *REPO_DIR
 | 
				
			||||||
@@ -38,12 +38,12 @@ install:
 | 
				
			|||||||
      appveyor DownloadFile "%QBT_LIB_URL%" -FileName "c:\qbt_lib.7z" && 7z x "c:\qbt_lib.7z" -o"%CACHE_DIR%" > nul &&
 | 
					      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")
 | 
					      COPY "c:\version_new" "%CACHE_DIR%\version")
 | 
				
			||||||
  # Qt stay compressed in cache
 | 
					  # Qt stay compressed in cache
 | 
				
			||||||
  - 7z x "%CACHE_DIR%\qt5_64.7z" -o"c:\qbt" > nul
 | 
					  - 7z x "%CACHE_DIR%\qt5_32.7z" -o"c:\qbt" > nul
 | 
				
			||||||
 | 
					
 | 
				
			||||||
before_build:
 | 
					before_build:
 | 
				
			||||||
  # setup env
 | 
					  # setup env
 | 
				
			||||||
  - CALL "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat"
 | 
					  - CALL "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars32.bat"
 | 
				
			||||||
  - SET PATH=%PATH%;C:\Qt\5.15.2\msvc2019_64\bin;%CACHE_DIR%\jom
 | 
					  - SET PATH=%PATH%;c:\qbt\qt5_32\bin;%CACHE_DIR%\jom;
 | 
				
			||||||
  # setup project
 | 
					  # setup project
 | 
				
			||||||
  - COPY /Y "%CACHE_DIR%\conf.pri" "%REPO_DIR%"
 | 
					  - COPY /Y "%CACHE_DIR%\conf.pri" "%REPO_DIR%"
 | 
				
			||||||
  # workarounds
 | 
					  # workarounds
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										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-rasterbar 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)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										89
									
								
								.github/ISSUE_TEMPLATE/bug_report.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										89
									
								
								.github/ISSUE_TEMPLATE/bug_report.md
									
									
									
									
										vendored
									
									
								
							@@ -1,89 +0,0 @@
 | 
				
			|||||||
---
 | 
					 | 
				
			||||||
name: Bug Report
 | 
					 | 
				
			||||||
about: Report a problem with qBittorrent to help us resolve it.
 | 
					 | 
				
			||||||
title: ''
 | 
					 | 
				
			||||||
labels: ''
 | 
					 | 
				
			||||||
assignees: ''
 | 
					 | 
				
			||||||
---
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Bug report
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<!--
 | 
					 | 
				
			||||||
###############################################################################
 | 
					 | 
				
			||||||
  WARNING!
 | 
					 | 
				
			||||||
  IGNORING THE INSTRUCTIONS IN THIS TEMPLATE WILL RESULT IN THE ISSUE BEING
 | 
					 | 
				
			||||||
  CLOSED AS INCOMPLETE/INVALID
 | 
					 | 
				
			||||||
###############################################################################
 | 
					 | 
				
			||||||
-->
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Checklist
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<!--
 | 
					 | 
				
			||||||
################################## IMPORTANT ##################################
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
As you read and fulfill each of the following requirements below,
 | 
					 | 
				
			||||||
put an "x" between the square brackets to mark each task as done, like so: [x]
 | 
					 | 
				
			||||||
-->
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- [ ] I have read the **issue reporting section** in the [contributing guidelines](https://github.com/qbittorrent/qBittorrent/blob/master/CONTRIBUTING.md), so I know how to submit a good bug report with the required information
 | 
					 | 
				
			||||||
- [ ] I have verified that the **issue is not fixed and is reproducible** in the **[latest version](https://www.qbittorrent.org/download.php)**
 | 
					 | 
				
			||||||
- [ ] (optional but recommended) I have verified that the **issue is not fixed and is reproducible** in the **[latest CI build](https://github.com/qbittorrent/qBittorrent/actions/workflows/ci.yaml?query=branch%3Amaster+event%3Apush)**
 | 
					 | 
				
			||||||
- [ ] I have **checked the [frequent/common issues list](https://github.com/qbittorrent/qBittorrent/projects/2)** and **searched** the issue tracker for similar bug reports (including closed ones) **to avoid posting a duplicate**
 | 
					 | 
				
			||||||
- [ ] This report 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/). The [wiki](https://github.com/qbittorrent/qBittorrent/wiki) did not contain a suitable solution either
 | 
					 | 
				
			||||||
- [ ] I have **pasted/attached the settings file and relevant log(s)** in the **Attachments** section at the bottom of the report. Mandatory: the settings file and at least the most recent log. See [this wiki page](https://github.com/qbittorrent/qBittorrent/wiki/Frequently-Asked-Questions#Where_does_qBittorrent_save_its_settings) if you're not sure where to find them.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Description
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<!--
 | 
					 | 
				
			||||||
################################## IMPORTANT ##################################
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Delete each "(type here)" indicator and type your text in their place in the subsections below.
 | 
					 | 
				
			||||||
You MUST fill in ALL subsections marked with "(type here)" with the appropriate information.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Please make sure the description is worded well enough to be understood.
 | 
					 | 
				
			||||||
Provide steps to reproduce the issue, any additional relevant information, suggested solution (if applicable) and as much context and examples as possible.
 | 
					 | 
				
			||||||
For more information consult the Contributing Guidelines at https://github.com/qbittorrent/qBittorrent/blob/master/CONTRIBUTING.md.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Do not forget about the mandatory attachments!
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Use the Preview tab before posting to make sure your report looks like it is formatted properly.
 | 
					 | 
				
			||||||
You don't need to delete these comments, they won't show up in the final post.
 | 
					 | 
				
			||||||
-->
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### qBittorrent info and operating system(s)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<!--
 | 
					 | 
				
			||||||
IMPORTANT:
 | 
					 | 
				
			||||||
if you did not get the qBittorrent installer from the links in the official website
 | 
					 | 
				
			||||||
or if you did not install it from the PPA, please mention that after the version
 | 
					 | 
				
			||||||
-->
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- qBittorrent version: (type here)
 | 
					 | 
				
			||||||
- Operating system(s) where the issue occurs: (type here)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### If on Linux, `libtorrent-rasterbar` and `Qt` versions
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- Qt: (type here)
 | 
					 | 
				
			||||||
- libtorrent-rasterbar: (type here)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### What is the problem
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
(type here)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Detailed steps to reproduce the problem
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
1. (type here)
 | 
					 | 
				
			||||||
2. (type here)
 | 
					 | 
				
			||||||
3. (etc.)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### What is the expected behavior
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
(type here)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Extra info (if any)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
(type here)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Attachments
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<!-- paste file contents here (or attach the files if they are big), do NOT link to external sites -->
 | 
					 | 
				
			||||||
							
								
								
									
										20
									
								
								.github/ISSUE_TEMPLATE/config.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										20
									
								
								.github/ISSUE_TEMPLATE/config.yml
									
									
									
									
										vendored
									
									
								
							@@ -1,20 +0,0 @@
 | 
				
			|||||||
blank_issues_enabled: false
 | 
					 | 
				
			||||||
contact_links:
 | 
					 | 
				
			||||||
  -
 | 
					 | 
				
			||||||
    about: "Consult the wiki first (especially the FAQ), it might already contain the information you are looking for"
 | 
					 | 
				
			||||||
    name: Wiki
 | 
					 | 
				
			||||||
    url: "https://github.com/qbittorrent/qBittorrent/wiki/"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  -
 | 
					 | 
				
			||||||
    about: "Please ask questions related to usage/setup/support/non-issue development discussion in the Discussions section"
 | 
					 | 
				
			||||||
    name: Question
 | 
					 | 
				
			||||||
    url: "https://github.com/qbittorrent/qBittorrent/discussions"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  -
 | 
					 | 
				
			||||||
    about: "Alternatively, ask on the official forum"
 | 
					 | 
				
			||||||
    name: Question
 | 
					 | 
				
			||||||
    url: "http://forum.qbittorrent.org/"
 | 
					 | 
				
			||||||
  -
 | 
					 | 
				
			||||||
    about: "Alternatively, use the subreddit"
 | 
					 | 
				
			||||||
    name: Question
 | 
					 | 
				
			||||||
    url: "https://www.reddit.com/r/qBittorrent/"
 | 
					 | 
				
			||||||
							
								
								
									
										61
									
								
								.github/ISSUE_TEMPLATE/feature_request.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										61
									
								
								.github/ISSUE_TEMPLATE/feature_request.md
									
									
									
									
										vendored
									
									
								
							@@ -1,61 +0,0 @@
 | 
				
			|||||||
---
 | 
					 | 
				
			||||||
name: Feature Request
 | 
					 | 
				
			||||||
about: Suggest a new feature or enhancement for qBittorrent.
 | 
					 | 
				
			||||||
title: ''
 | 
					 | 
				
			||||||
labels: 'Feature request'
 | 
					 | 
				
			||||||
assignees: ''
 | 
					 | 
				
			||||||
---
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Feature request
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<!--
 | 
					 | 
				
			||||||
###############################################################################
 | 
					 | 
				
			||||||
  WARNING!
 | 
					 | 
				
			||||||
  IGNORING THE INSTRUCTIONS IN THIS TEMPLATE WILL RESULT IN THE ISSUE BEING
 | 
					 | 
				
			||||||
  CLOSED AS INCOMPLETE/INVALID
 | 
					 | 
				
			||||||
###############################################################################
 | 
					 | 
				
			||||||
-->
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Checklist
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<!--
 | 
					 | 
				
			||||||
################################## IMPORTANT ##################################
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
As you read and fulfill each of the following requirements below,
 | 
					 | 
				
			||||||
put an "x" between the square brackets to mark each task as done, like so: [x]
 | 
					 | 
				
			||||||
-->
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- [ ] I have read the **feature request section** in the [contributing guidelines](https://github.com/qbittorrent/qBittorrent/blob/master/CONTRIBUTING.md), so I know how to submit a good feature request with the required information
 | 
					 | 
				
			||||||
- [ ] I have verified that the **feature** I am requesting is **not available** in the **[latest version](https://www.qbittorrent.org/download.php)**
 | 
					 | 
				
			||||||
- [ ] (optional but recommended) I have verified that the **feature** I am requesting is **not available** in the **[latest CI build](https://github.com/qbittorrent/qBittorrent/actions/workflows/ci.yaml?query=branch%3Amaster+event%3Apush)**
 | 
					 | 
				
			||||||
- [ ] I have **checked the [frequent/common issues list](https://github.com/qbittorrent/qBittorrent/projects/2)** and **searched** the issue tracker for similar feature requests (including closed ones) **to avoid posting a duplicate**
 | 
					 | 
				
			||||||
- [ ] This request 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/). The [wiki](https://github.com/qbittorrent/qBittorrent/wiki) did not contain a suitable solution either
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Description
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<!--
 | 
					 | 
				
			||||||
################################## IMPORTANT ##################################
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Delete each "(type here)" indicator and type your text in their place in the subsections below.
 | 
					 | 
				
			||||||
You MUST fill in ALL subsections marked with "(type here)" with the appropriate information.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Please make sure the description is worded well enough to be understood.
 | 
					 | 
				
			||||||
Provide a detailed description of the feature and as much context and examples as necessary.
 | 
					 | 
				
			||||||
If the feature request has to do with visual elements and the GUI, images/screenshots are always helpful.
 | 
					 | 
				
			||||||
For more information consult the Contributing Guidelines at https://github.com/qbittorrent/qBittorrent/blob/master/CONTRIBUTING.md.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Use the Preview tab before posting to make sure your report looks like it is formatted properly.
 | 
					 | 
				
			||||||
You don't need to delete these comments, they won't show up in the final post.
 | 
					 | 
				
			||||||
-->
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Suggestion
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
(type here)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Use case
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
(type here)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Extra info/examples/attachments
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<!-- optional -->
 | 
					 | 
				
			||||||
							
								
								
									
										16
									
								
								.github/PULL_REQUEST_TEMPLATE/pull_request.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										16
									
								
								.github/PULL_REQUEST_TEMPLATE/pull_request.md
									
									
									
									
										vendored
									
									
								
							@@ -1,16 +0,0 @@
 | 
				
			|||||||
# Changes proposed in this pull request
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<!--
 | 
					 | 
				
			||||||
IMPORTANT: an image is worth a thousand words.
 | 
					 | 
				
			||||||
It is often a good idea to post screenshots showing the "before" and "after" your PR's changes,
 | 
					 | 
				
			||||||
especially with changes related to the GUI, along with the textual description.
 | 
					 | 
				
			||||||
Images makes it immediately clearer for others what your proposed changes are all about.
 | 
					 | 
				
			||||||
-->
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
(type here)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<!--
 | 
					 | 
				
			||||||
OPTIONAL: if this PR directly addresses an issue, make sure to include a "Closes #XXXXX" statement at the end.
 | 
					 | 
				
			||||||
-->
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<!-- You don't need to delete these comments before posting, they won't show up in the post :) -->
 | 
					 | 
				
			||||||
							
								
								
									
										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 [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/
 | 
					 | 
				
			||||||
							
								
								
									
										20
									
								
								.github/workflows/ci_file_health.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										20
									
								
								.github/workflows/ci_file_health.yaml
									
									
									
									
										vendored
									
									
								
							@@ -1,20 +0,0 @@
 | 
				
			|||||||
name: CI - File health
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
on: [pull_request, push]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
jobs:
 | 
					 | 
				
			||||||
  ci:
 | 
					 | 
				
			||||||
    name: Check
 | 
					 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					 | 
				
			||||||
    steps:
 | 
					 | 
				
			||||||
      - name: Checkout repository
 | 
					 | 
				
			||||||
        uses: actions/checkout@v2
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Install tools
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          sudo apt update
 | 
					 | 
				
			||||||
          sudo apt install zsh
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Check files
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          ./.github/workflows/file_health.sh
 | 
					 | 
				
			||||||
							
								
								
									
										73
									
								
								.github/workflows/ci_macos.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										73
									
								
								.github/workflows/ci_macos.yaml
									
									
									
									
										vendored
									
									
								
							@@ -1,73 +0,0 @@
 | 
				
			|||||||
name: CI - macOS
 | 
					 | 
				
			||||||
on: [pull_request, push]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
jobs:
 | 
					 | 
				
			||||||
  ci:
 | 
					 | 
				
			||||||
    name: Build
 | 
					 | 
				
			||||||
    runs-on: macos-10.15
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    strategy:
 | 
					 | 
				
			||||||
      matrix:
 | 
					 | 
				
			||||||
        libt_version: ["v2.0.4", "v1.2.14"]
 | 
					 | 
				
			||||||
        qbt_gui: ["GUI=ON", "GUI=OFF"]
 | 
					 | 
				
			||||||
      fail-fast: false
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    env:
 | 
					 | 
				
			||||||
      openssl_root: /usr/local/opt/openssl@1.1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    steps:
 | 
					 | 
				
			||||||
      - name: Checkout repository
 | 
					 | 
				
			||||||
        uses: actions/checkout@v2
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Setup ccache
 | 
					 | 
				
			||||||
        uses: hendrikmuhs/ccache-action@v1
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          key: ${{ runner.os }}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Install dependencies
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          brew update > /dev/null
 | 
					 | 
				
			||||||
          brew install \
 | 
					 | 
				
			||||||
            cmake ninja \
 | 
					 | 
				
			||||||
            boost openssl@1.1 qt@5 zlib
 | 
					 | 
				
			||||||
          brew link --force \
 | 
					 | 
				
			||||||
            qt@5
 | 
					 | 
				
			||||||
          # workaround for cmake + Qt
 | 
					 | 
				
			||||||
          sudo ln -s /usr/local/opt/qt@5/mkspecs /usr/local/mkspecs
 | 
					 | 
				
			||||||
          sudo ln -s /usr/local/opt/qt@5/plugins /usr/local/plugins
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Install libtorrent
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          git clone --branch ${{ matrix.libt_version }} --depth 1 https://github.com/arvidn/libtorrent.git
 | 
					 | 
				
			||||||
          cd libtorrent
 | 
					 | 
				
			||||||
          git submodule update --init --recursive
 | 
					 | 
				
			||||||
          export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
 | 
					 | 
				
			||||||
          cmake \
 | 
					 | 
				
			||||||
            -B build \
 | 
					 | 
				
			||||||
            -G "Ninja" \
 | 
					 | 
				
			||||||
            -DCMAKE_BUILD_TYPE=RelWithDebInfo \
 | 
					 | 
				
			||||||
            -DCMAKE_CXX_STANDARD=17 \
 | 
					 | 
				
			||||||
            -Ddeprecated-functions=OFF \
 | 
					 | 
				
			||||||
            -DOPENSSL_ROOT_DIR="${{ env.openssl_root }}"
 | 
					 | 
				
			||||||
          cmake --build build
 | 
					 | 
				
			||||||
          sudo cmake --install build
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Build qBittorrent
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
 | 
					 | 
				
			||||||
          cmake \
 | 
					 | 
				
			||||||
            -B build \
 | 
					 | 
				
			||||||
            -G "Ninja" \
 | 
					 | 
				
			||||||
            -DCMAKE_BUILD_TYPE=RelWithDebInfo \
 | 
					 | 
				
			||||||
            -D${{ matrix.qbt_gui }} \
 | 
					 | 
				
			||||||
            -DVERBOSE_CONFIGURE=ON \
 | 
					 | 
				
			||||||
            -DOPENSSL_ROOT_DIR="${{ env.openssl_root }}"
 | 
					 | 
				
			||||||
          cmake --build build
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Upload build artifacts
 | 
					 | 
				
			||||||
        uses: actions/upload-artifact@v2
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          name: qBittorrent-CI_macOS_${{ matrix.qbt_gui }}_libtorrent-${{ matrix.libt_version }}
 | 
					 | 
				
			||||||
          path: |
 | 
					 | 
				
			||||||
            build/qbittorrent.app
 | 
					 | 
				
			||||||
            build/qbittorrent-nox.app
 | 
					 | 
				
			||||||
							
								
								
									
										84
									
								
								.github/workflows/ci_ubuntu.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										84
									
								
								.github/workflows/ci_ubuntu.yaml
									
									
									
									
										vendored
									
									
								
							@@ -1,84 +0,0 @@
 | 
				
			|||||||
name: CI - Ubuntu
 | 
					 | 
				
			||||||
on: [pull_request, push]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
jobs:
 | 
					 | 
				
			||||||
  ci:
 | 
					 | 
				
			||||||
    name: Build
 | 
					 | 
				
			||||||
    runs-on: ubuntu-20.04
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    strategy:
 | 
					 | 
				
			||||||
      matrix:
 | 
					 | 
				
			||||||
        libt_version: ["v2.0.4", "v1.2.14"]
 | 
					 | 
				
			||||||
        qbt_gui: ["GUI=ON", "GUI=OFF"]
 | 
					 | 
				
			||||||
      fail-fast: false
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    steps:
 | 
					 | 
				
			||||||
      - name: Checkout repository
 | 
					 | 
				
			||||||
        uses: actions/checkout@v2
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Setup ccache
 | 
					 | 
				
			||||||
        uses: hendrikmuhs/ccache-action@v1
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          key: ${{ runner.os }}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Install dependencies
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          sudo apt update
 | 
					 | 
				
			||||||
          sudo apt install \
 | 
					 | 
				
			||||||
            build-essential cmake git ninja-build pkg-config \
 | 
					 | 
				
			||||||
            libssl-dev libgeoip-dev zlib1g-dev \
 | 
					 | 
				
			||||||
            libboost-dev libboost-chrono-dev libboost-random-dev libboost-system-dev
 | 
					 | 
				
			||||||
        # sudo apt install libqt5svg5-dev qtbase5-dev qttools5-dev # the Qt version in the standard repositories is too old...
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      # this will be installed under /opt/qt515. CMake will still find it automatically without additional hints
 | 
					 | 
				
			||||||
      # to speed up the process, only the required components are installed rather than the full qt515-meta-full metapackage
 | 
					 | 
				
			||||||
      - name: Install Qt
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          sudo add-apt-repository ppa:beineri/opt-qt-5.15.2-focal
 | 
					 | 
				
			||||||
          sudo apt install \
 | 
					 | 
				
			||||||
            qt515base qt515svg qt515tools
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Install libtorrent
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          git clone --branch ${{ matrix.libt_version }} --depth 1 https://github.com/arvidn/libtorrent.git
 | 
					 | 
				
			||||||
          cd libtorrent
 | 
					 | 
				
			||||||
          git submodule update --init --recursive
 | 
					 | 
				
			||||||
          export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
 | 
					 | 
				
			||||||
          cmake \
 | 
					 | 
				
			||||||
            -B build \
 | 
					 | 
				
			||||||
            -G "Ninja" \
 | 
					 | 
				
			||||||
            -DCMAKE_BUILD_TYPE=RelWithDebInfo \
 | 
					 | 
				
			||||||
            -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
 | 
					 | 
				
			||||||
            -Ddeprecated-functions=OFF \
 | 
					 | 
				
			||||||
            --graphviz=cmake-build-dir/target_graph.dot
 | 
					 | 
				
			||||||
          cmake --build build
 | 
					 | 
				
			||||||
          sudo cmake --install build
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Build qBittorrent
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
 | 
					 | 
				
			||||||
          cmake \
 | 
					 | 
				
			||||||
            -B build \
 | 
					 | 
				
			||||||
            -G "Ninja" \
 | 
					 | 
				
			||||||
            -DCMAKE_BUILD_TYPE=RelWithDebInfo \
 | 
					 | 
				
			||||||
            -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
 | 
					 | 
				
			||||||
            -D${{ matrix.qbt_gui }} \
 | 
					 | 
				
			||||||
            -DVERBOSE_CONFIGURE=ON \
 | 
					 | 
				
			||||||
            --graphviz=build/target_graph.dot
 | 
					 | 
				
			||||||
          cmake --build build
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Install qBittorrent
 | 
					 | 
				
			||||||
        run: sudo cmake --install build
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Upload build artifacts
 | 
					 | 
				
			||||||
        uses: actions/upload-artifact@v2
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          name: qBittorrent-CI_ubuntu-20.04-x64_${{ matrix.qbt_gui }}_libtorrent-${{ matrix.libt_version }}
 | 
					 | 
				
			||||||
          path: |
 | 
					 | 
				
			||||||
            build/compile_commands.json
 | 
					 | 
				
			||||||
            build/install_manifest.txt
 | 
					 | 
				
			||||||
            build/target_graph.dot
 | 
					 | 
				
			||||||
            build/qbittorrent
 | 
					 | 
				
			||||||
            build/qbittorrent-nox
 | 
					 | 
				
			||||||
            libtorrent/cmake-build-dir/compile_commands.json
 | 
					 | 
				
			||||||
            libtorrent/cmake-build-dir/target_graph.dot
 | 
					 | 
				
			||||||
							
								
								
									
										32
									
								
								.github/workflows/ci_webui.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										32
									
								
								.github/workflows/ci_webui.yaml
									
									
									
									
										vendored
									
									
								
							@@ -1,32 +0,0 @@
 | 
				
			|||||||
name: CI - WebUI
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
on: [pull_request, push]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
jobs:
 | 
					 | 
				
			||||||
  ci:
 | 
					 | 
				
			||||||
    name: Check
 | 
					 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    defaults:
 | 
					 | 
				
			||||||
      run:
 | 
					 | 
				
			||||||
        working-directory: src/webui/www
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    steps:
 | 
					 | 
				
			||||||
      - name: Checkout repository
 | 
					 | 
				
			||||||
        uses: actions/checkout@v2
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Setup nodejs
 | 
					 | 
				
			||||||
        uses: actions/setup-node@v2
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          node-version: 'lts/*'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Install tools
 | 
					 | 
				
			||||||
        run: npm install
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Lint code
 | 
					 | 
				
			||||||
        run: npm run lint
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Format code
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          npm run format
 | 
					 | 
				
			||||||
          git diff --exit-code
 | 
					 | 
				
			||||||
							
								
								
									
										85
									
								
								.github/workflows/ci_windows.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										85
									
								
								.github/workflows/ci_windows.yaml
									
									
									
									
										vendored
									
									
								
							@@ -1,85 +0,0 @@
 | 
				
			|||||||
name: CI - Windows
 | 
					 | 
				
			||||||
on: [pull_request, push]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
jobs:
 | 
					 | 
				
			||||||
  ci:
 | 
					 | 
				
			||||||
    name: Build
 | 
					 | 
				
			||||||
    runs-on: windows-2019
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    steps:
 | 
					 | 
				
			||||||
      - name: Checkout repository
 | 
					 | 
				
			||||||
        uses: actions/checkout@v2
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Install build tools
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          choco install ninja
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      # use the preinstalled vcpkg from image
 | 
					 | 
				
			||||||
      # https://github.com/actions/virtual-environments/blob/main/images/win/Windows2019-Readme.md#package-management
 | 
					 | 
				
			||||||
      - name: Setup vcpkg
 | 
					 | 
				
			||||||
        uses: lukka/run-vcpkg@v7
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          vcpkgDirectory: C:/vcpkg
 | 
					 | 
				
			||||||
          doNotUpdateVcpkg: true  # the preinstalled vcpkg is updated regularly
 | 
					 | 
				
			||||||
          setupOnly: true
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      # tell vcpkg to only build Release variants of the dependencies
 | 
					 | 
				
			||||||
      - name: Configure vcpkg triplet overlay
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          New-Item `
 | 
					 | 
				
			||||||
            -Path "${{ github.workspace }}" `
 | 
					 | 
				
			||||||
            -Name "triplets_overlay" `
 | 
					 | 
				
			||||||
            -ItemType Directory
 | 
					 | 
				
			||||||
          Copy-Item `
 | 
					 | 
				
			||||||
            "${{ env.RUNVCPKG_VCPKG_ROOT }}/triplets/x64-windows-static.cmake" `
 | 
					 | 
				
			||||||
            "${{ github.workspace }}/triplets_overlay/x64-windows-static-release.cmake"
 | 
					 | 
				
			||||||
          Add-Content `
 | 
					 | 
				
			||||||
            "${{ github.workspace }}/triplets_overlay/x64-windows-static-release.cmake" `
 | 
					 | 
				
			||||||
            -Value "set(VCPKG_BUILD_TYPE release)"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      # clear buildtrees after each package installation to reduce disk space requirements
 | 
					 | 
				
			||||||
      - name: Install dependencies
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          $packages = `
 | 
					 | 
				
			||||||
            "boost-circular-buffer:x64-windows-static-release",
 | 
					 | 
				
			||||||
            "libtorrent:x64-windows-static-release",
 | 
					 | 
				
			||||||
            "qt5-base:x64-windows-static-release",
 | 
					 | 
				
			||||||
            "qt5-svg:x64-windows-static-release",
 | 
					 | 
				
			||||||
            "qt5-tools:x64-windows-static-release",
 | 
					 | 
				
			||||||
            "qt5-winextras:x64-windows-static-release"
 | 
					 | 
				
			||||||
          ${{ env.RUNVCPKG_VCPKG_ROOT }}/vcpkg.exe upgrade `
 | 
					 | 
				
			||||||
            --overlay-triplets="${{ github.workspace }}/triplets_overlay" `
 | 
					 | 
				
			||||||
            --no-dry-run
 | 
					 | 
				
			||||||
          ${{ env.RUNVCPKG_VCPKG_ROOT }}/vcpkg.exe install `
 | 
					 | 
				
			||||||
            --overlay-triplets="${{ github.workspace }}/triplets_overlay" `
 | 
					 | 
				
			||||||
            --clean-after-build `
 | 
					 | 
				
			||||||
            $packages
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      # this is necessary to correctly find and use cl.exe with the Ninja generator for now
 | 
					 | 
				
			||||||
      - name: Setup devcmd
 | 
					 | 
				
			||||||
        uses: ilammy/msvc-dev-cmd@v1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Build qBittorrent
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          cmake `
 | 
					 | 
				
			||||||
            -B build `
 | 
					 | 
				
			||||||
            -G "Ninja" `
 | 
					 | 
				
			||||||
            -DCMAKE_BUILD_TYPE=RelWithDebInfo `
 | 
					 | 
				
			||||||
            -DCMAKE_EXPORT_COMPILE_COMMANDS=ON `
 | 
					 | 
				
			||||||
            -DCMAKE_TOOLCHAIN_FILE="${{ env.RUNVCPKG_VCPKG_ROOT }}/scripts/buildsystems/vcpkg.cmake" `
 | 
					 | 
				
			||||||
            -DMSVC_RUNTIME_DYNAMIC=OFF `
 | 
					 | 
				
			||||||
            -DVCPKG_TARGET_TRIPLET=x64-windows-static-release `
 | 
					 | 
				
			||||||
            -DVERBOSE_CONFIGURE=ON `
 | 
					 | 
				
			||||||
            --graphviz=build/target_graph.dot
 | 
					 | 
				
			||||||
          cmake --build build
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Upload build artifacts
 | 
					 | 
				
			||||||
        uses: actions/upload-artifact@v2
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          name: qBittorrent-CI_Windows-x64
 | 
					 | 
				
			||||||
          path: |
 | 
					 | 
				
			||||||
            build/compile_commands.json
 | 
					 | 
				
			||||||
            build/qbittorrent.exe
 | 
					 | 
				
			||||||
            build/qbittorrent.pdb
 | 
					 | 
				
			||||||
            build/target_graph.dot
 | 
					 | 
				
			||||||
            dist/windows/qt.conf
 | 
					 | 
				
			||||||
							
								
								
									
										85
									
								
								.github/workflows/coverity-scan.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										85
									
								
								.github/workflows/coverity-scan.yml
									
									
									
									
										vendored
									
									
								
							@@ -1,85 +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.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
env:
 | 
					 | 
				
			||||||
  LIBTORRENT_VERSION_TAG: v1.2.14
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
jobs:
 | 
					 | 
				
			||||||
  coverity_scan:
 | 
					 | 
				
			||||||
    name: Scan
 | 
					 | 
				
			||||||
    runs-on: ubuntu-20.04
 | 
					 | 
				
			||||||
    steps:
 | 
					 | 
				
			||||||
      - name: Checkout repository
 | 
					 | 
				
			||||||
        uses: actions/checkout@v2
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Install dependencies
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          sudo apt update
 | 
					 | 
				
			||||||
          sudo apt install \
 | 
					 | 
				
			||||||
            build-essential cmake git ninja-build pkg-config \
 | 
					 | 
				
			||||||
            libssl-dev zlib1g-dev libboost-dev libboost-system-dev
 | 
					 | 
				
			||||||
        # sudo apt install libqt5svg5-dev qtbase5-dev qttools5-dev # the Qt version in the standard repositories is too old...
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      # this will be installed under /opt/qt515. CMake will still find it automatically without additional hints
 | 
					 | 
				
			||||||
      # to speed up the process, only the required components are installed rather than the full qt515-meta-full metapackage
 | 
					 | 
				
			||||||
      - name: Install Qt
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          sudo add-apt-repository ppa:beineri/opt-qt-5.15.2-focal
 | 
					 | 
				
			||||||
          sudo apt install \
 | 
					 | 
				
			||||||
            qt515base qt515svg qt515tools
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Install libtorrent
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          git clone https://github.com/arvidn/libtorrent
 | 
					 | 
				
			||||||
          cd libtorrent
 | 
					 | 
				
			||||||
          git checkout ${{ env.LIBTORRENT_VERSION_TAG }}
 | 
					 | 
				
			||||||
          cmake \
 | 
					 | 
				
			||||||
            -B build \
 | 
					 | 
				
			||||||
            -G "Ninja" \
 | 
					 | 
				
			||||||
            -DCMAKE_BUILD_TYPE=Release \
 | 
					 | 
				
			||||||
            -Ddeprecated-functions=OFF
 | 
					 | 
				
			||||||
          cmake --build build
 | 
					 | 
				
			||||||
          sudo cmake --install build --prefix /usr/local
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Download Coverity Build Tool
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          wget \
 | 
					 | 
				
			||||||
            -q \
 | 
					 | 
				
			||||||
            https://scan.coverity.com/download/linux64 \
 | 
					 | 
				
			||||||
            --post-data "token=$TOKEN&project=qbittorrent%2FqBittorrent" \
 | 
					 | 
				
			||||||
            -O coverity_tool.tgz
 | 
					 | 
				
			||||||
          mkdir coverity_tool
 | 
					 | 
				
			||||||
          tar xzf coverity_tool.tgz --strip 1 -C coverity_tool
 | 
					 | 
				
			||||||
        env:
 | 
					 | 
				
			||||||
          TOKEN: ${{ secrets.COVERITY_SCAN_TOKEN }}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Configure qBittorrent
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          cmake \
 | 
					 | 
				
			||||||
            -B build \
 | 
					 | 
				
			||||||
            -G "Ninja" \
 | 
					 | 
				
			||||||
            -DCMAKE_BUILD_TYPE=Release \
 | 
					 | 
				
			||||||
            -DGUI=ON \
 | 
					 | 
				
			||||||
            -DVERBOSE_CONFIGURE=ON
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Build qBittorrent
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          export PATH="$(pwd)/coverity_tool/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=$TOKEN \
 | 
					 | 
				
			||||||
            --form email=sledgehammer999@qbittorrent.org \
 | 
					 | 
				
			||||||
            --form file=@qbittorrent.tgz \
 | 
					 | 
				
			||||||
            --form version="$(git rev-parse --short HEAD)" \
 | 
					 | 
				
			||||||
            --form description="master" \
 | 
					 | 
				
			||||||
            https://scan.coverity.com/builds?project=qbittorrent%2FqBittorrent
 | 
					 | 
				
			||||||
        env:
 | 
					 | 
				
			||||||
          TOKEN: ${{ secrets.COVERITY_SCAN_TOKEN }}
 | 
					 | 
				
			||||||
							
								
								
									
										85
									
								
								.github/workflows/file_health.sh
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										85
									
								
								.github/workflows/file_health.sh
									
									
									
									
										vendored
									
									
								
							@@ -1,85 +0,0 @@
 | 
				
			|||||||
#!/usr/bin/env zsh
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
set -o nounset
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Assumption: file names don't contain `:` (for the `cut` invocation).
 | 
					 | 
				
			||||||
# Safe to assume, as such a character in a filename would cause trouble on Windows, a platform we support
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# any regression turn this non-zero
 | 
					 | 
				
			||||||
regressions=0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# exclusions (these are just grep extended regular expressions to match against paths relative to the root of the repository)
 | 
					 | 
				
			||||||
exclusions_nonutf8='(.*(7z|gif|ic(ns|o)|png|qm|zip))'
 | 
					 | 
				
			||||||
exclusions_bom='src/base/unicodestrings.h'
 | 
					 | 
				
			||||||
exclusions_tw='(*.ts)|src/webui/www/private/scripts/lib/*'
 | 
					 | 
				
			||||||
exclusions_trailing_newline='configure'
 | 
					 | 
				
			||||||
exclusions_no_lf='(*.ts)|(.*svg)|compile_commands.json|src/webui/www/private/scripts/lib/*'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
echo -e "\n*** Detect files not encoded in UTF-8 ***\n"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
find . -path ./build -prune -false -o -path ./.git -prune -false -o -type f -exec file --mime {} \; | sort \
 | 
					 | 
				
			||||||
    | grep -v -e "charset=us-ascii" -e "charset=utf-8" | cut -d ":" -f 1 \
 | 
					 | 
				
			||||||
    | grep -E -v -e "${exclusions_nonutf8}" \
 | 
					 | 
				
			||||||
    | tee >(echo -e "--> Files not encoded in UTF-8: found" "$(wc -l < /dev/stdin)" "regression(s)\n") \
 | 
					 | 
				
			||||||
    | xargs -I my_input -0 bash -c 'echo "my_input"; test "$(echo -n "my_input" | wc -l)" -eq 0'
 | 
					 | 
				
			||||||
regressions=$((regressions+$?))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
echo -e "\n*** Detect files encoded in UTF-8 with BOM ***\n"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
grep --exclude-dir={.git,build} -rIl $'\xEF\xBB\xBF' | sort \
 | 
					 | 
				
			||||||
    | grep -E -v -e "${exclusions_bom}" \
 | 
					 | 
				
			||||||
    | tee >(echo -e "--> Files encoded in UTF-8 with BOM: found" "$(wc -l < /dev/stdin)" "regression(s)\n") \
 | 
					 | 
				
			||||||
    | xargs -I my_input -0 bash -c 'echo "my_input"; test "$(echo -n "my_input" | wc -l)" -eq 0'
 | 
					 | 
				
			||||||
regressions=$((regressions+$?))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
echo -e "\n*** Detect usage of CR byte ***\n"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
grep --exclude-dir={.git,build} -rIlU $'\x0D' | sort \
 | 
					 | 
				
			||||||
    | tee >(echo -e "--> Usage of CR byte: found" "$(wc -l < /dev/stdin)" "regression(s)\n") \
 | 
					 | 
				
			||||||
    | xargs -I my_input -0 bash -c 'echo "my_input"; test "$(echo -n "my_input" | wc -l)" -eq 0'
 | 
					 | 
				
			||||||
regressions=$((regressions+$?))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
echo -e "\n*** Detect trailing whitespace in lines ***\n"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
grep --exclude-dir={.git,build} -rIl "[[:blank:]]$" | sort \
 | 
					 | 
				
			||||||
    | grep -E -v -e "${exclusions_tw}" \
 | 
					 | 
				
			||||||
    | tee >(echo -e "--> Trailing whitespace in lines: found" "$(wc -l < /dev/stdin)" "regression(s)\n") \
 | 
					 | 
				
			||||||
    | xargs -I my_input -0 bash -c 'echo "my_input"; test "$(echo -n "my_input" | wc -l)" -eq 0';
 | 
					 | 
				
			||||||
regressions=$((regressions+$?))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
echo -e "\n*** Detect too many trailing newlines ***\n"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
find . -path ./build -prune -false -o -path ./.git -prune -false -o -type f -exec file --mime {} \; | sort \
 | 
					 | 
				
			||||||
    | grep -e "charset=us-ascii" -e "charset=utf-8" | cut -d ":" -f 1 \
 | 
					 | 
				
			||||||
    | grep -E -v -e "${exclusions_trailing_newline}" \
 | 
					 | 
				
			||||||
    | xargs -L1 -I my_input bash -c 'test "$(tail -q -c2 "my_input" | hexdump -C | grep "0a 0a")" && echo "my_input"' \
 | 
					 | 
				
			||||||
    | tee >(echo -e "--> Too many trailing newlines: found" "$(wc -l < /dev/stdin)" "regression(s)\n") \
 | 
					 | 
				
			||||||
    | xargs -I my_input -0 bash -c 'echo "my_input"; test "$(echo -n "my_input" | wc -l)" -eq 0'
 | 
					 | 
				
			||||||
regressions=$((regressions+$?))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
echo -e "\n*** Detect no trailing newline ***\n"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
find . -path ./build -prune -false -o -path ./.git -prune -false -o -type f -exec file --mime {} \; | sort \
 | 
					 | 
				
			||||||
    | grep -e "charset=us-ascii" -e "charset=utf-8" |  cut -d ":" -f 1 \
 | 
					 | 
				
			||||||
    | grep -E -v -e "${exclusions_no_lf}" \
 | 
					 | 
				
			||||||
    | xargs -L1 -I my_input bash -c 'test "$(tail -q -c1 "my_input" | hexdump -C | grep "0a")" || echo "my_input"' \
 | 
					 | 
				
			||||||
    | tee >(echo -e "--> No trailing newline: found" "$(wc -l < /dev/stdin)" "regression(s)\n") \
 | 
					 | 
				
			||||||
    | xargs -I my_input -0 bash -c 'echo "my_input"; test "$(echo -n "my_input" | wc -l)" -eq 0'
 | 
					 | 
				
			||||||
regressions=$((regressions+$?))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
echo -e "\n*** Detect translation closing tag in new line ***\n"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
grep --exclude-dir={.git,build} -nri "^</translation>" | sort \
 | 
					 | 
				
			||||||
    | cut -d ":" -f 1,2 \
 | 
					 | 
				
			||||||
    | tee >(echo -e "--> Translation closing tag in new line: found" "$(wc -l < /dev/stdin)" "regression(s)\n") \
 | 
					 | 
				
			||||||
    | xargs -I my_input -0 bash -c 'echo "my_input"; test "$(echo -n "my_input" | wc -l)" -eq 0'
 | 
					 | 
				
			||||||
regressions=$((regressions+$?))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if [ "$regressions" -ne 0 ]; then
 | 
					 | 
				
			||||||
    regressions=1
 | 
					 | 
				
			||||||
    echo "\nFile health regressions found. Please fix them (or add them as exclusions)."
 | 
					 | 
				
			||||||
else
 | 
					 | 
				
			||||||
    echo "All OK, no file health regressions found."
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
exit $regressions;
 | 
					 | 
				
			||||||
							
								
								
									
										22
									
								
								.github/workflows/stale_bot.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										22
									
								
								.github/workflows/stale_bot.yaml
									
									
									
									
										vendored
									
									
								
							@@ -1,22 +0,0 @@
 | 
				
			|||||||
name: Stale bot
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
on:
 | 
					 | 
				
			||||||
  schedule:
 | 
					 | 
				
			||||||
    - cron: '0 0 * * *'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
jobs:
 | 
					 | 
				
			||||||
  stale:
 | 
					 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					 | 
				
			||||||
    steps:
 | 
					 | 
				
			||||||
      - name: Mark and close stale PRs
 | 
					 | 
				
			||||||
        uses: actions/stale@v4
 | 
					 | 
				
			||||||
        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
 | 
					 | 
				
			||||||
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -4,7 +4,6 @@ src/qbittorrent
 | 
				
			|||||||
src/qbittorrent-nox
 | 
					src/qbittorrent-nox
 | 
				
			||||||
src/release
 | 
					src/release
 | 
				
			||||||
src/debug
 | 
					src/debug
 | 
				
			||||||
src/base/version.h
 | 
					 | 
				
			||||||
CMakeLists.txt.user*
 | 
					CMakeLists.txt.user*
 | 
				
			||||||
qbittorrent.pro.user*
 | 
					qbittorrent.pro.user*
 | 
				
			||||||
conf.pri
 | 
					conf.pri
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										237
									
								
								.travis.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										237
									
								
								.travis.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,237 @@
 | 
				
			|||||||
 | 
					language: cpp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					os:
 | 
				
			||||||
 | 
					  - linux
 | 
				
			||||||
 | 
					  - osx
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					dist: xenial
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					env:
 | 
				
			||||||
 | 
					  matrix:
 | 
				
			||||||
 | 
					    - libt_branch=RC_1_2 gui=true build_system=qmake
 | 
				
			||||||
 | 
					    - libt_branch=RC_1_2 gui=false build_system=qmake
 | 
				
			||||||
 | 
					    - libt_branch=RC_1_2 gui=true build_system=cmake
 | 
				
			||||||
 | 
					    - libt_branch=RC_1_2 gui=false build_system=cmake
 | 
				
			||||||
 | 
					    - libt_branch=RC_1_1 gui=true build_system=qmake
 | 
				
			||||||
 | 
					    - libt_branch=RC_1_1 gui=false build_system=qmake
 | 
				
			||||||
 | 
					    - libt_branch=RC_1_1 gui=true build_system=cmake
 | 
				
			||||||
 | 
					    - libt_branch=RC_1_1 gui=false build_system=cmake
 | 
				
			||||||
 | 
					  global:
 | 
				
			||||||
 | 
					    - secure: "OI9CUjj4lTb0HwwIZU5PbECU3hLlAL6KC8KsbwohG8/O3j5fLcnmDsK4Ad9us5cC39sS11Jcd1kDP2qRcCuST/glVNhLkcjKkiQerOfd5nQ/qL4JYfz/1mfP5mdpz9jHKzpLUIG+TXkbSTjP6VVmsb5KPT+3pKEdRFZB+Pu9+J8="
 | 
				
			||||||
 | 
					    - coverity_branch: coverity_scan
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					matrix:
 | 
				
			||||||
 | 
					  allow_failures:
 | 
				
			||||||
 | 
					    - env: libt_branch=RC_1_2 gui=true build_system=cmake
 | 
				
			||||||
 | 
					    - env: libt_branch=RC_1_2 gui=false build_system=cmake
 | 
				
			||||||
 | 
					    - env: libt_branch=RC_1_1 gui=true build_system=cmake
 | 
				
			||||||
 | 
					    - env: libt_branch=RC_1_1 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/travis/deb
 | 
				
			||||||
 | 
					    - $HOME/travis/brew
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					addons:
 | 
				
			||||||
 | 
					  coverity_scan:
 | 
				
			||||||
 | 
					    project:
 | 
				
			||||||
 | 
					      name: "qbittorrent/qBittorrent"
 | 
				
			||||||
 | 
					      description: "Build submitted via Travis CI"
 | 
				
			||||||
 | 
					    build_command_prepend: "./bootstrap.sh && ./configure $qmake_conf"
 | 
				
			||||||
 | 
					    build_command: "make -j2"
 | 
				
			||||||
 | 
					    branch_pattern: $coverity_branch
 | 
				
			||||||
 | 
					    notification_email: sledgehammer999@qbittorrent.org
 | 
				
			||||||
 | 
					  apt:
 | 
				
			||||||
 | 
					    sources:
 | 
				
			||||||
 | 
					      # sources list: https://github.com/travis-ci/apt-source-safelist/blob/master/ubuntu.json
 | 
				
			||||||
 | 
					      - sourceline: 'ppa:qbittorrent-team/qbt-libtorrent-travisci'
 | 
				
			||||||
 | 
					      - sourceline: 'ppa:beineri/opt-qt59-xenial'
 | 
				
			||||||
 | 
					    packages:
 | 
				
			||||||
 | 
					      # packages list: https://github.com/travis-ci/apt-package-safelist/blob/master/ubuntu-trusty
 | 
				
			||||||
 | 
					      - [autoconf, automake, colormake]
 | 
				
			||||||
 | 
					      - [libboost-dev, libboost-system-dev]
 | 
				
			||||||
 | 
					      - libssl-dev
 | 
				
			||||||
 | 
					      - [qt59base, qt59svg, qt59tools]
 | 
				
			||||||
 | 
					      - zlib1g-dev
 | 
				
			||||||
 | 
					      # required for Qt 5.9 from 'beineri' PPA
 | 
				
			||||||
 | 
					      - libgl1-mesa-dev
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					before_install:
 | 
				
			||||||
 | 
					  # only allow specific build for coverity scan, others will stop
 | 
				
			||||||
 | 
					  - if [ "$TRAVIS_BRANCH" = "$coverity_branch" ] && ! [ "$TRAVIS_OS_NAME" = "linux" -a "$libt_branch" = "RC_1_2" -a "$gui" = "true" -a "$build_system" = "qmake" ]; then exit ; fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - shopt -s expand_aliases
 | 
				
			||||||
 | 
					  - alias make="colormake -j2" # Using nprocs/2 sometimes may fail (gcc is killed by system)
 | 
				
			||||||
 | 
					  - qbt_path="$HOME/qbt_install"
 | 
				
			||||||
 | 
					  - qmake_conf="$qmake_conf --prefix=$qbt_path"
 | 
				
			||||||
 | 
					  - cmake_conf="$cmake_conf -DCMAKE_INSTALL_PREFIX=$qbt_path"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # options for specific branches
 | 
				
			||||||
 | 
					  - |
 | 
				
			||||||
 | 
					    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.9
 | 
				
			||||||
 | 
					      PATH=/opt/qt59/bin:${PATH}
 | 
				
			||||||
 | 
					      qmake_conf="$qmake_conf PKG_CONFIG_PATH=/opt/qt59/lib/pkgconfig:$PKG_CONFIG_PATH"
 | 
				
			||||||
 | 
					      cmake_conf="$cmake_conf PKG_CONFIG_PATH=/opt/qt59/lib/pkgconfig:$PKG_CONFIG_PATH"
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					  - |
 | 
				
			||||||
 | 
					    if [ "$TRAVIS_OS_NAME" = "osx" ]; then
 | 
				
			||||||
 | 
					      CXXFLAGS="$CXXFLAGS -Wno-unused-local-typedefs"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      openssl_root_path="/usr/local/opt/openssl"
 | 
				
			||||||
 | 
					      qmake_conf="$qmake_conf PKG_CONFIG_PATH=$openssl_root_path/lib/pkgconfig:$PKG_CONFIG_PATH"
 | 
				
			||||||
 | 
					      cmake_conf="$cmake_conf -DOPENSSL_ROOT_DIR=$openssl_root_path"
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					  - |
 | 
				
			||||||
 | 
					    if [ "$gui" = "false" ]; then
 | 
				
			||||||
 | 
					      qmake_conf="$qmake_conf --disable-gui"
 | 
				
			||||||
 | 
					      cmake_conf="$cmake_conf -DCMAKE_DISABLE_FIND_PACKAGE_Qt5Widgets=ON"
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # print settings
 | 
				
			||||||
 | 
					  - echo $libt_branch
 | 
				
			||||||
 | 
					  - echo $gui
 | 
				
			||||||
 | 
					  - echo $build_system
 | 
				
			||||||
 | 
					  - echo $qmake_conf
 | 
				
			||||||
 | 
					  - echo $cmake_conf
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					install:
 | 
				
			||||||
 | 
					  - |
 | 
				
			||||||
 | 
					    if [ "$TRAVIS_OS_NAME" = "osx" ]; then
 | 
				
			||||||
 | 
					      # dependencies
 | 
				
			||||||
 | 
					      PATH="/usr/local/opt/ccache/libexec:$PATH"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      brew update > /dev/null
 | 
				
			||||||
 | 
					      brew install ccache colormake boost openssl qt zlib
 | 
				
			||||||
 | 
					      brew link --force qt zlib
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      if [ "$build_system" = "cmake" ]; then
 | 
				
			||||||
 | 
					        sudo ln -s /usr/local/opt/qt/mkspecs /usr/local/mkspecs
 | 
				
			||||||
 | 
					        sudo ln -s /usr/local/opt/qt/plugins /usr/local/plugins
 | 
				
			||||||
 | 
					      fi
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					  - |
 | 
				
			||||||
 | 
					    if [ "$TRAVIS_BRANCH" != "$coverity_branch" ]; then
 | 
				
			||||||
 | 
					      export use_ccache=true
 | 
				
			||||||
 | 
					      ccache -M 512M
 | 
				
			||||||
 | 
					      ccache -V && ccache --show-stats && ccache --zero-stats
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					  - |
 | 
				
			||||||
 | 
					    if [ "$libt_branch" = "RC_1_1" ] && [ "$TRAVIS_OS_NAME" = "linux" ]; then
 | 
				
			||||||
 | 
					      wget https://builds.shiki.hu/travis/deb/version
 | 
				
			||||||
 | 
					      if ! cmp --quiet "version" "$HOME/travis/deb/version" ; then
 | 
				
			||||||
 | 
					        echo "Cached files are different from server. Downloading new ones."
 | 
				
			||||||
 | 
					        # First delete old files
 | 
				
			||||||
 | 
					        rm -r "$HOME/travis/deb"
 | 
				
			||||||
 | 
					        mkdir "$HOME/travis/deb"
 | 
				
			||||||
 | 
					        cp "version" $HOME/travis/deb
 | 
				
			||||||
 | 
					        cd "$HOME/travis/deb"
 | 
				
			||||||
 | 
					        wget https://builds.shiki.hu/travis/deb/libtorrent-rasterbar-dev_1.1.x_amd64.deb
 | 
				
			||||||
 | 
					        wget https://builds.shiki.hu/travis/deb/libtorrent-rasterbar9_1.1.x_amd64.deb
 | 
				
			||||||
 | 
					      fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      sudo dpkg -i "$HOME/travis/deb/libtorrent-rasterbar-dev_1.1.x_amd64.deb" "$HOME/travis/deb/libtorrent-rasterbar9_1.1.x_amd64.deb"
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					  - |
 | 
				
			||||||
 | 
					    if [ "$libt_branch" = "RC_1_2" ] && [ "$TRAVIS_OS_NAME" = "linux" ]; then
 | 
				
			||||||
 | 
					      # Will install latest 1.2.x daily build from the PPA
 | 
				
			||||||
 | 
					      sudo apt-get -y install libtorrent-rasterbar-dev
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					  - |
 | 
				
			||||||
 | 
					    if [ "$libt_branch" = "RC_1_1" ] && [ "$TRAVIS_OS_NAME" = "osx" ]; then
 | 
				
			||||||
 | 
					      wget https://builds.shiki.hu/travis/brew/1_1/version
 | 
				
			||||||
 | 
					      if ! cmp --quiet "version" "$HOME/travis/brew/1_1/version" ; then
 | 
				
			||||||
 | 
					        echo "Cached files are different from server. Downloading new ones."
 | 
				
			||||||
 | 
					        # First delete old files
 | 
				
			||||||
 | 
					        rm -r "$HOME/travis/brew/1_1"
 | 
				
			||||||
 | 
					        mkdir "$HOME/travis/brew/1_1"
 | 
				
			||||||
 | 
					        cp "version" $HOME/travis/brew/1_1
 | 
				
			||||||
 | 
					        cd "$HOME/travis/brew/1_1"
 | 
				
			||||||
 | 
					        wget https://builds.shiki.hu/travis/brew/1_1/libtorrent-rasterbar.rb
 | 
				
			||||||
 | 
					        wget https://builds.shiki.hu/travis/brew/1_1/bd36a4b440aa138a88e375c1a3b672f1a1bc6606e7866fc3415b6b98fa49e771--libtorrent-rasterbar-1.1.13.high_sierra.bottle.tar.gz
 | 
				
			||||||
 | 
					      fi
 | 
				
			||||||
 | 
					      # Copy custom libtorrent bottle to homebrew's download 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/travis/brew/1_1/bd36a4b440aa138a88e375c1a3b672f1a1bc6606e7866fc3415b6b98fa49e771--libtorrent-rasterbar-1.1.13.high_sierra.bottle.tar.gz" "$(brew --cache)/downloads"
 | 
				
			||||||
 | 
					      brew uninstall libtorrent-rasterbar
 | 
				
			||||||
 | 
					      brew install "$HOME/travis/brew/1_1/libtorrent-rasterbar.rb"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      # NOTE about the bottle name
 | 
				
			||||||
 | 
					      # The part before the "--" characters is a sha256 hash of the string
 | 
				
			||||||
 | 
					      # of the URL homebrew itself would use to download the bottle.
 | 
				
			||||||
 | 
					      # In this case the URL is the following:
 | 
				
			||||||
 | 
					      # http://127.0.0.1/libtorrent-rasterbar-1.1.13.high_sierra.bottle.tar.gz
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					  - |
 | 
				
			||||||
 | 
					    if [ "$libt_branch" = "RC_1_2" ] && [ "$TRAVIS_OS_NAME" = "osx" ]; then
 | 
				
			||||||
 | 
					      wget https://builds.shiki.hu/travis/brew/version
 | 
				
			||||||
 | 
					      if ! cmp --quiet "version" "$HOME/travis/brew/version" ; then
 | 
				
			||||||
 | 
					        echo "Cached files are different from server. Downloading new ones."
 | 
				
			||||||
 | 
					        # First delete old files
 | 
				
			||||||
 | 
					        rm -r "$HOME/travis/brew"
 | 
				
			||||||
 | 
					        mkdir "$HOME/travis/brew"
 | 
				
			||||||
 | 
					        cp "version" $HOME/travis/brew
 | 
				
			||||||
 | 
					        cd "$HOME/travis/brew"
 | 
				
			||||||
 | 
					        wget https://builds.shiki.hu/travis/brew/libtorrent-rasterbar.rb
 | 
				
			||||||
 | 
					        wget https://builds.shiki.hu/travis/brew/6e4eb13f70df35e8fc7ff41883fef3e5c7b535dd55c78cd2ce1eae3fb4288e21--libtorrent-rasterbar-1.2.0.high_sierra.bottle.tar.gz
 | 
				
			||||||
 | 
					      fi
 | 
				
			||||||
 | 
					      # Copy custom libtorrent bottle to homebrew's download 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/travis/brew/6e4eb13f70df35e8fc7ff41883fef3e5c7b535dd55c78cd2ce1eae3fb4288e21--libtorrent-rasterbar-1.2.0.high_sierra.bottle.tar.gz" "$(brew --cache)/downloads"
 | 
				
			||||||
 | 
					      brew uninstall libtorrent-rasterbar
 | 
				
			||||||
 | 
					      brew install "$HOME/travis/brew/libtorrent-rasterbar.rb"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      # NOTE about the bottle name
 | 
				
			||||||
 | 
					      # The part before the "--" characters is a sha256 hash of the string
 | 
				
			||||||
 | 
					      # of the URL homebrew itself would use to download the bottle.
 | 
				
			||||||
 | 
					      # In this case the URL is the following:
 | 
				
			||||||
 | 
					      # http://127.0.0.1/libtorrent-rasterbar-1.2.0.high_sierra.bottle.tar.gz
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					script:
 | 
				
			||||||
 | 
					  - if [ "$TRAVIS_BRANCH" = "$coverity_branch" ]; then exit ; fi # skip usual build when running coverity scan
 | 
				
			||||||
 | 
					  - |
 | 
				
			||||||
 | 
					    cd "$TRAVIS_BUILD_DIR"
 | 
				
			||||||
 | 
					    if [ "$build_system" = "qmake" ]; then
 | 
				
			||||||
 | 
					      # scan only as lupdate is prone to hang
 | 
				
			||||||
 | 
					      lupdate -extensions c,cpp,h,hpp,ui ./
 | 
				
			||||||
 | 
					      ./bootstrap.sh
 | 
				
			||||||
 | 
					      ./configure $qmake_conf CXXFLAGS="$CXXFLAGS"
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					      mkdir build && cd build
 | 
				
			||||||
 | 
					      cmake $cmake_conf ../
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					  - make && make 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
 | 
				
			||||||
							
								
								
									
										20
									
								
								AUTHORS
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								AUTHORS
									
									
									
									
									
								
							@@ -17,23 +17,19 @@ 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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* file src/app/stacktrace.h
 | 
					* file src/stacktrace_win.h
 | 
				
			||||||
  copyright: Timo Bingmann from http://idlebox.net/
 | 
					 | 
				
			||||||
  license: WTFPL v2.0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* file src/app/stacktrace_win.h
 | 
					 | 
				
			||||||
  copyright: Quassel Project
 | 
					  copyright: Quassel Project
 | 
				
			||||||
  license: GPLv2/3
 | 
					  license: GPLv2/3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -66,7 +62,7 @@ Images Authors:
 | 
				
			|||||||
  copyright: Mateusz Tobola <tobejodok@qbittorrent.org>
 | 
					  copyright: Mateusz Tobola <tobejodok@qbittorrent.org>
 | 
				
			||||||
  license: GPLv2
 | 
					  license: GPLv2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* file: src/icons/tabs.gif
 | 
					* file: src/icons/skin/tabs.gif
 | 
				
			||||||
  copyright: Greg Houston <gregory.houston@gmail.com>
 | 
					  copyright: Greg Houston <gregory.houston@gmail.com>
 | 
				
			||||||
  license: MIT
 | 
					  license: MIT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -123,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)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										109
									
								
								CMakeLists.txt
									
									
									
									
									
								
							
							
						
						
									
										109
									
								
								CMakeLists.txt
									
									
									
									
									
								
							@@ -1,65 +1,60 @@
 | 
				
			|||||||
cmake_minimum_required(VERSION 3.16 FATAL_ERROR) # Policies <= CMP0097 default to NEW
 | 
					cmake_minimum_required(VERSION 3.9 FATAL_ERROR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules)
 | 
					message(AUTHOR_WARNING "If the build fails, please try the autotools/qmake method.")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
project(qBittorrent
 | 
					if(POLICY CMP0074)
 | 
				
			||||||
    DESCRIPTION "The qBittorrent BitTorrent client"
 | 
					    cmake_policy(SET CMP0074 NEW)
 | 
				
			||||||
    HOMEPAGE_URL "https://www.qbittorrent.org/"
 | 
					 | 
				
			||||||
    LANGUAGES CXX
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# use CONFIG mode first in find_package
 | 
					 | 
				
			||||||
set(CMAKE_FIND_PACKAGE_PREFER_CONFIG ON)
 | 
					 | 
				
			||||||
# version requirements - older versions may work, but you are on your own
 | 
					 | 
				
			||||||
set(minBoostVersion 1.65)
 | 
					 | 
				
			||||||
set(minQtVersion 5.15.2)
 | 
					 | 
				
			||||||
set(minOpenSSLVersion 1.1.1)
 | 
					 | 
				
			||||||
set(minLibtorrent1Version 1.2.14)
 | 
					 | 
				
			||||||
set(minLibtorrentVersion 2.0.4)
 | 
					 | 
				
			||||||
set(minZlibVersion 1.2.11)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# features (some are platform-specific)
 | 
					 | 
				
			||||||
include(CheckCXXSourceCompiles) # TODO: migrate to CheckSourceCompiles in CMake >= 3.19
 | 
					 | 
				
			||||||
include(FeatureSummary)
 | 
					 | 
				
			||||||
include(FeatureOptionsSetup)
 | 
					 | 
				
			||||||
feature_option(STACKTRACE "Enable stacktraces" ON)
 | 
					 | 
				
			||||||
feature_option(GUI "Build GUI application" ON)
 | 
					 | 
				
			||||||
feature_option(WEBUI "Enables built-in HTTP server for headless use" ON)
 | 
					 | 
				
			||||||
feature_option(VERBOSE_CONFIGURE "Show information about PACKAGES_FOUND and PACKAGES_NOT_FOUND in the configure output (only useful for debugging the CMake build scripts)" OFF)
 | 
					 | 
				
			||||||
if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
 | 
					 | 
				
			||||||
    feature_option_dependent(DBUS
 | 
					 | 
				
			||||||
        "Enables support for notifications and power-management features on Linux via D-Bus"
 | 
					 | 
				
			||||||
        ON "GUI" OFF
 | 
					 | 
				
			||||||
    )
 | 
					 | 
				
			||||||
    feature_option_dependent(SYSTEMD
 | 
					 | 
				
			||||||
        "Install systemd service file to a directory manually overridable with Systemd_SERVICES_INSTALL_DIR"
 | 
					 | 
				
			||||||
        OFF "NOT GUI" OFF
 | 
					 | 
				
			||||||
    )
 | 
					 | 
				
			||||||
    if (STACKTRACE)
 | 
					 | 
				
			||||||
        check_cxx_source_compiles(
 | 
					 | 
				
			||||||
            "#include <execinfo.h>
 | 
					 | 
				
			||||||
            int main(){return 0;}"
 | 
					 | 
				
			||||||
            QBITTORRENT_HAS_EXECINFO_H
 | 
					 | 
				
			||||||
        )
 | 
					 | 
				
			||||||
        if (NOT QBITTORRENT_HAS_EXECINFO_H)
 | 
					 | 
				
			||||||
            message(FATAL_ERROR "execinfo.h header file not found.\n"
 | 
					 | 
				
			||||||
                "Please either disable the STACKTRACE feature or use a libc that has this header file, such as glibc (GNU libc)."
 | 
					 | 
				
			||||||
            )
 | 
					 | 
				
			||||||
        endif()
 | 
					 | 
				
			||||||
    endif()
 | 
					 | 
				
			||||||
elseif (MSVC)
 | 
					 | 
				
			||||||
    feature_option(MSVC_RUNTIME_DYNAMIC "Use MSVC dynamic runtime library (-MD) instead of static (-MT)" ON)
 | 
					 | 
				
			||||||
endif()
 | 
					endif()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules)
 | 
				
			||||||
 | 
					include(FunctionReadVersion)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					read_version("${CMAKE_CURRENT_SOURCE_DIR}/version.pri" VER_MAJOR VER_MINOR VER_BUGFIX VER_BUILD VER_STATUS)
 | 
				
			||||||
 | 
					# message(STATUS "Project version is: ${VER_MAJOR}.${VER_MINOR}.${VER_BUGFIX}.${VER_BUILD} (${VER_STATUS})")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					project(qBittorrent VERSION ${VER_MAJOR}.${VER_MINOR}.${VER_BUGFIX}.${VER_BUILD})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					set(PROJECT_VERSION "${VER_MAJOR}.${VER_MINOR}.${VER_BUGFIX}")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if (NOT VER_BUILD EQUAL 0)
 | 
				
			||||||
 | 
					    set(PROJECT_VERSION "${PROJECT_VERSION}.${VER_BUILD}")
 | 
				
			||||||
 | 
					endif()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					set(PROJECT_VERSION "${PROJECT_VERSION}${VER_STATUS}")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					add_definitions(-DQBT_VERSION_MAJOR=${VER_MAJOR})
 | 
				
			||||||
 | 
					add_definitions(-DQBT_VERSION_MINOR=${VER_MINOR})
 | 
				
			||||||
 | 
					add_definitions(-DQBT_VERSION_BUGFIX=${VER_BUGFIX})
 | 
				
			||||||
 | 
					add_definitions(-DQBT_VERSION_BUILD=${VER_BUILD})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					add_definitions(-DQBT_VERSION="v${PROJECT_VERSION}")
 | 
				
			||||||
 | 
					add_definitions(-DQBT_VERSION_2="${PROJECT_VERSION}")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
include(GNUInstallDirs)
 | 
					include(GNUInstallDirs)
 | 
				
			||||||
 | 
					include(FeatureSummary)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# version requirements
 | 
				
			||||||
 | 
					set(requiredBoostVersion 1.40)
 | 
				
			||||||
 | 
					set(requiredQtVersion 5.9.0)
 | 
				
			||||||
 | 
					set(requiredOpensslVersion 1.0)
 | 
				
			||||||
 | 
					set(requiredLibtorrentVersion 1.1.10)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if(WIN32)
 | 
				
			||||||
 | 
					    include(winconf)
 | 
				
			||||||
 | 
					endif(WIN32)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# we need options here, at the top level, because they are used not only in "src" subdir, but in the "dist" dir too
 | 
				
			||||||
 | 
					include(CompileFeature)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					optional_compile_definitions(COUNTRIES_RESOLUTION FEATURE DESCRIPTION "Enable resolving peers IP addresses to countries"
 | 
				
			||||||
 | 
					    DEFAULT ON DISABLED DISABLE_COUNTRIES_RESOLUTION)
 | 
				
			||||||
 | 
					optional_compile_definitions(STACKTRACE FEATURE DESCRIPTION "Enable stacktraces"
 | 
				
			||||||
 | 
					    DEFAULT ON ENABLED STACKTRACE)
 | 
				
			||||||
 | 
					optional_compile_definitions(WEBUI FEATURE DESCRIPTION "Enables built-in HTTP server for headless use"
 | 
				
			||||||
 | 
					    DEFAULT ON DISABLED DISABLE_WEBUI)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
add_subdirectory(src)
 | 
					add_subdirectory(src)
 | 
				
			||||||
add_subdirectory(dist)
 | 
					add_subdirectory(dist)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if (VERBOSE_CONFIGURE)
 | 
					feature_summary(DESCRIPTION "\nConfiguration results:" WHAT ALL)
 | 
				
			||||||
    feature_summary(WHAT ALL)
 | 
					 | 
				
			||||||
else()
 | 
					 | 
				
			||||||
    feature_summary(WHAT ENABLED_FEATURES DISABLED_FEATURES)
 | 
					 | 
				
			||||||
endif()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Generate version header
 | 
					 | 
				
			||||||
configure_file("src/base/version.h.in" "${CMAKE_CURRENT_SOURCE_DIR}/src/base/version.h" @ONLY)
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -138,7 +138,7 @@ These are unstable/unsupported platforms, and in all likelihood, whatever the is
 | 
				
			|||||||
*   **For performance-related issues**, include as much profiling data as you can (resource usage graphs, etc).
 | 
					*   **For performance-related issues**, include as much profiling data as you can (resource usage graphs, etc).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
*   Paste the **qBittorrent log** (or put the contents of the log in a gist and provide a link to the gist). The log can be viewed in the GUI (View -> Log -> tick all boxes). If you can't do that, the file is at:
 | 
					*   Paste the **qBittorrent log** (or put the contents of the log in a gist and provide a link to the gist). The log can be viewed in the GUI (View -> Log -> tick all boxes). If you can't do that, the file is at:
 | 
				
			||||||
    -   Linux: `~/.local/share/qBittorrent/logs/qBittorrent.log`
 | 
					    -   Linux: `~/.local/share/data/qBittorrent/logs/qBittorrent.log`
 | 
				
			||||||
    -   Windows: `%LocalAppData%\qBittorrent\logs`
 | 
					    -   Windows: `%LocalAppData%\qBittorrent\logs`
 | 
				
			||||||
    -   macOS: `~/Library/Application Support/qBittorrent/qBittorrent.log`
 | 
					    -   macOS: `~/Library/Application Support/qBittorrent/qBittorrent.log`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										72
									
								
								COPYING
									
									
									
									
									
								
							
							
						
						
									
										72
									
								
								COPYING
									
									
									
									
									
								
							@@ -1,6 +1,5 @@
 | 
				
			|||||||
qBittorrent is licensed under the GNU General Public License either version 2,
 | 
					qBittorrent is licensed under the GNU General Public License version 2 with the
 | 
				
			||||||
or (at your option) any later version with the addition of the following
 | 
					addition of the following special exception:
 | 
				
			||||||
special exception:
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
In addition, as a special exception, the copyright holders give permission to
 | 
					In addition, as a special exception, the copyright holders give permission to
 | 
				
			||||||
link this program with the OpenSSL project's "OpenSSL" library (or with
 | 
					link this program with the OpenSSL project's "OpenSSL" library (or with
 | 
				
			||||||
@@ -11,15 +10,13 @@ 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
 | 
					but you are not obligated to do so. If you do not wish to do so, delete this
 | 
				
			||||||
exception statement from your version.
 | 
					exception statement from your version.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See also the AUTHORS file
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
----------
 | 
					----------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    GNU GENERAL PUBLIC LICENSE
 | 
					                    GNU GENERAL PUBLIC LICENSE
 | 
				
			||||||
                       Version 2, June 1991
 | 
					                       Version 2, June 1991
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
 | 
					 Copyright (C) 1989, 1991 Free Software Foundation, Inc.
 | 
				
			||||||
 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 | 
					                       51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 | 
				
			||||||
 Everyone is permitted to copy and distribute verbatim copies
 | 
					 Everyone is permitted to copy and distribute verbatim copies
 | 
				
			||||||
 of this license document, but changing it is not allowed.
 | 
					 of this license document, but changing it is not allowed.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -32,7 +29,7 @@ software--to make sure the software is free for all its users.  This
 | 
				
			|||||||
General Public License applies to most of the Free Software
 | 
					General Public License applies to most of the Free Software
 | 
				
			||||||
Foundation's software and to any other program whose authors commit to
 | 
					Foundation's software and to any other program whose authors commit to
 | 
				
			||||||
using it.  (Some other Free Software Foundation software is covered by
 | 
					using it.  (Some other Free Software Foundation software is covered by
 | 
				
			||||||
the GNU Lesser General Public License instead.)  You can apply it to
 | 
					the GNU Library General Public License instead.)  You can apply it to
 | 
				
			||||||
your programs, too.
 | 
					your programs, too.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  When we speak of free software, we are referring to freedom, not
 | 
					  When we speak of free software, we are referring to freedom, not
 | 
				
			||||||
@@ -295,62 +292,3 @@ PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
 | 
				
			|||||||
POSSIBILITY OF SUCH DAMAGES.
 | 
					POSSIBILITY OF SUCH DAMAGES.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                     END OF TERMS AND CONDITIONS
 | 
					                     END OF TERMS AND CONDITIONS
 | 
				
			||||||
 | 
					 | 
				
			||||||
            How to Apply These Terms to Your New Programs
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  If you develop a new program, and you want it to be of the greatest
 | 
					 | 
				
			||||||
possible use to the public, the best way to achieve this is to make it
 | 
					 | 
				
			||||||
free software which everyone can redistribute and change under these terms.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  To do so, attach the following notices to the program.  It is safest
 | 
					 | 
				
			||||||
to attach them to the start of each source file to most effectively
 | 
					 | 
				
			||||||
convey the exclusion of warranty; and each file should have at least
 | 
					 | 
				
			||||||
the "copyright" line and a pointer to where the full notice is found.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <one line to give the program's name and a brief idea of what it does.>
 | 
					 | 
				
			||||||
    Copyright (C) <year>  <name of author>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    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.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Also add information on how to contact you by electronic and paper mail.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
If the program is interactive, make it output a short notice like this
 | 
					 | 
				
			||||||
when it starts in an interactive mode:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    Gnomovision version 69, Copyright (C) year name of author
 | 
					 | 
				
			||||||
    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
 | 
					 | 
				
			||||||
    This is free software, and you are welcome to redistribute it
 | 
					 | 
				
			||||||
    under certain conditions; type `show c' for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
The hypothetical commands `show w' and `show c' should show the appropriate
 | 
					 | 
				
			||||||
parts of the General Public License.  Of course, the commands you use may
 | 
					 | 
				
			||||||
be called something other than `show w' and `show c'; they could even be
 | 
					 | 
				
			||||||
mouse-clicks or menu items--whatever suits your program.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
You should also get your employer (if you work as a programmer) or your
 | 
					 | 
				
			||||||
school, if any, to sign a "copyright disclaimer" for the program, if
 | 
					 | 
				
			||||||
necessary.  Here is a sample; alter the names:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
 | 
					 | 
				
			||||||
  `Gnomovision' (which makes passes at compilers) written by James Hacker.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  <signature of Ty Coon>, 1 April 1989
 | 
					 | 
				
			||||||
  Ty Coon, President of Vice
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
This General Public License does not permit incorporating your program into
 | 
					 | 
				
			||||||
proprietary programs.  If your program is a subroutine library, you may
 | 
					 | 
				
			||||||
consider it more useful to permit linking proprietary applications with the
 | 
					 | 
				
			||||||
library.  If this is what you want to do, use the GNU Lesser General
 | 
					 | 
				
			||||||
Public License instead of this License.
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										186
									
								
								Changelog
									
									
									
									
									
								
							
							
						
						
									
										186
									
								
								Changelog
									
									
									
									
									
								
							@@ -1,59 +1,123 @@
 | 
				
			|||||||
Unreleased - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.4.0
 | 
					Sat Apr 25 2020 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.2.5
 | 
				
			||||||
    - FEATURE: Add support for creating v2 torrents(requires libtorrent 2.0.x) (Chocobo1)
 | 
					    - BUGFIX: Fix crash when torrent is deleted on limit reached (glassez)
 | 
				
			||||||
    - FEATURE: Expose libtorrent hashing_threads settings (Anton Bershanskiy)
 | 
					    - BUGFIX: Register datatype properly (Chocobo1)
 | 
				
			||||||
 | 
					    - WEBUI: Add ability to send custom HTTP headers (Chocobo1)
 | 
				
			||||||
 | 
					    - WEBUI: Expand RSS related API (Sepro)
 | 
				
			||||||
 | 
					    - WINDOWS: Installer: Update german translation (schnurlos)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Sun Oct 18 2020 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.3.0
 | 
					Wed Apr 22 2020 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.2.4
 | 
				
			||||||
    - FEATURE: Many UI elements colors are themeable now (jagannatharjun)
 | 
					    - BUGFIX: Fix sub-sorting of Transfer list (glassez)
 | 
				
			||||||
    - FEATURE: Allow changing GUI icons from theme bundles (jagannatharjun)
 | 
					    - BUGFIX: Fix wrong logic that disables "prevent sleeping" timer (Chocobo1)
 | 
				
			||||||
    - FEATURE: Notify user when torrent moving finished (glassez)
 | 
					    - BUGFIX: Set disk cache size for older libtorrent versions (NotTsunami)
 | 
				
			||||||
    - FEATURE: Shortcut CTRL + I opens Statistics window (LoopsGod)
 | 
					    - BUGFIX: Sort locale language list (Chocobo1)
 | 
				
			||||||
    - FEATURE: Add RSS functionality in Web UI (Sepro)
 | 
					    - BUGFIX: Remove white outline around mascot.png (adem)
 | 
				
			||||||
    - FEATURE: Drop ".unwanted folder" feature (glassez)
 | 
					    - BUGFIX: Various fixes in configuring the chosen network interface and not leaking the IP (Raif Atef, an0n666)
 | 
				
			||||||
    - FEATURE: Expose libtorrent peer_turnover, max_concurrent_http_announces, no_connect_privileged_ports settings (Sophist, an0n666, NotTsunami)
 | 
					    - BUGFIX: Save "resume data" when torrent storage is moved (glassez)
 | 
				
			||||||
    - BUGFIX: Fix typo in Options dialog (Andrei Stepanov)
 | 
					    - BUGFIX: Avoid holding encoded resume data in memory (Chocobo1)
 | 
				
			||||||
    - BUGFIX: Remove "requires restart" from network interface settings (an0n666)
 | 
					    - BUGFIX: Fix date format for "Last seen complete" (Chocobo1)
 | 
				
			||||||
    - BUGFIX: Rename "Create subfolder" to "Keep top-level folder" (thalieht)
 | 
					    - BUGFIX: Remove deprecated strict super seeding mode from advanced settings (an0n666)
 | 
				
			||||||
    - BUGFIX: Show tooltip for some properties in transfer list (Nick Korotysh)
 | 
					    - BUGFIX: Change default stop_tracker_timeout settings (an0n666)
 | 
				
			||||||
    - BUGFIX: Fix calculation of torrent current state (glassez)
 | 
					    - BUGFIX: Convert the Log widget to use custom View/Model (jagannatharjun)
 | 
				
			||||||
    - BUGFIX: Improve detecting completed files when adding, rechecking or moving a torrent (glassez)
 | 
					    - BUGFIX: Change default upload slot choking limits (an0n666)
 | 
				
			||||||
    - BUGFIX: Fixed broken announce logic in embedded tracker causing failures in some cases (FranciscoPombal)
 | 
					    - BUGFIX: Don't uncheck Authentication checkbox when changing proxy type (thalieht)
 | 
				
			||||||
    - BUGFIX: Disable checkbox if torrent doesn't have root folder (thalieht)
 | 
					    - BUGFIX: Reduce ambiguity for selecting tray icons (Chocobo1)
 | 
				
			||||||
    - BUGFIX: Update country flag icons with upstream (Chocobo1)
 | 
					    - WEBUI: Fix unable to add multiple peers in WebUI (Sepro)
 | 
				
			||||||
    - BUGFIX: Private torrent: If tracker entry is edited clear old peer list. Also don't allow user to manually add peers. (an0n666)
 | 
					    - WEBUI: Fix UPnP lease duration get/set (NotTsunami)
 | 
				
			||||||
    - BUGFIX: Fix large strings not visible in log widget (jagannatharjun)
 | 
					    - SEARCH: Detect python3 executable on Windows (József Sallai)
 | 
				
			||||||
    - BUGFIX: Disable edit action in Peer list widget (Chocobo1)
 | 
					
 | 
				
			||||||
    - BUGFIX: Add a scroll area to torrent creator dialog (Ernesto Castellotti)
 | 
					Wed Apr 01 2020 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.2.3
 | 
				
			||||||
    - BUGFIX: Content tab: Open double-clicked folder regardless on which column the click happens (Chocobo1)
 | 
					    - FEATURE: Add logging for SOCKS5 proxy errors (Chocobo1)
 | 
				
			||||||
    - BUGFIX: "Open containing folder" on a folder now opens it in its parent folder (Chocobo1)
 | 
					    - FEATURE: Add UPnP lease duration advanced option (NotTsunami)
 | 
				
			||||||
    - BUGFIX: Fix GeoDB download in systems with non-C locales (FranciscoPombal)
 | 
					    - BUGFIX: Allow to translate error messages (Chocobo1)
 | 
				
			||||||
    - BUGFIX: Fix peer blocked message (FranciscoPombal)
 | 
					    - BUGFIX: Don't round scaling factor (Nick Korotysh)
 | 
				
			||||||
    - BUGFIX: Make more robust the banning of selected peers from the list (NotTsunami)
 | 
					    - BUGFIX: Save log file in UTF-8 encoding (Chocobo1)
 | 
				
			||||||
    - BUGFIX: Use toned green color for downloading pieces in Pieces bar (jagannatharjun)
 | 
					    - BUGFIX: Avoid log file excessive flushing (Chocobo1)
 | 
				
			||||||
    - BUGFIX: Correctly fill whole width of speed graph (jagannatharjun)
 | 
					    - BUGFIX: Fix regression when fastresume contains network path (Tester798)
 | 
				
			||||||
    - BUGFIX: Fix impossible speed in speed graph (jagannatharjun)
 | 
					    - BUGFIX: Fix broken UNC paths in fastresumes on Windows (sledgehammer999)
 | 
				
			||||||
    - WEBUI: Hide additional search filters on small screens (Thomas Piccirello)
 | 
					    - BUGFIX: Prevent multiple instances for the same app config (glassez)
 | 
				
			||||||
    - WEBUI: Shrink search bar on small screens (Thomas Piccirello)
 | 
					    - BUGFIX: Fix unexpected torrent resume after app restart with libtorrent 1.1.x (glassez)
 | 
				
			||||||
    - WEBUI: Fix search categories only working in English (Thomas Piccirello)
 | 
					    - WEBUI: Add alt and title tags for WebUI footer (LameLemon)
 | 
				
			||||||
    - WEBUI: Add Trackers section to sidebar (Thomas Piccirello)
 | 
					    - WINDOWS: Installer: Update Finnish translation (Roope Jukkara)
 | 
				
			||||||
    - WEBUI: Fix Enter button behavior in textarea (Tom Piccirello)
 | 
					    - WINDOWS: Installer: Update Japanese translation (maboroshin)
 | 
				
			||||||
    - WEBUI: Fix wrong file renaming selection range (MR)
 | 
					    - WINDOWS: Installer: Update Turkish translation (Burak Yavuz)
 | 
				
			||||||
    - WEBUI: Preselect "Default save path" in watched folders (thalieht)
 | 
					    - WINDOWS: Installer: Update Russian translation (Andrei Stepanov)
 | 
				
			||||||
    - WEBUI: Fix banning peers (brvphoenix)
 | 
					
 | 
				
			||||||
    - WEBUI: Fix seeding time checkbox placement (Chocobo1)
 | 
					Tue Mar 24 2020 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.2.2
 | 
				
			||||||
    - WEBUI: Bump Web API version (Thomas Piccirello)
 | 
					    - FEATURE: Allow transfer list text color changes through QSS (Prince Gupta)
 | 
				
			||||||
    - RSS: Fix renaming RSS autodownload rule (glassez)
 | 
					    - FEATURE: Option to show console when external program is run (sledgehammer999)
 | 
				
			||||||
    - RSS: Fix RSS article is not marked as "read" when torrent is downloaded (glassez)
 | 
					    - FEATURE: Rename Country column to "Country / Region" (Thomas Piccirello)
 | 
				
			||||||
    - SEARCH: Update minimum Python version to 3.5.0 (ngosang)
 | 
					    - FEATURE: Change the defaults of some settings (FranciscoPombal)
 | 
				
			||||||
    - SEARCH: Make middle-click close search tabs (Will Da Silva)
 | 
					    - FEATURE: Refactored Transfer List code to allow theming. As a sideffect the row height has more padding. (glassez)
 | 
				
			||||||
    - WINDOWS: NSIS: Update Dutch translation (Thomas De Rocker)
 | 
					    - FEATURE: Allow double-click in preview dialog (thalieht)
 | 
				
			||||||
    - WINDOWS: NSIS: Change the installers uninstallation question to clear confusion (an0n666)
 | 
					    - FEATURE: Expose stop_tracker_timeout in advanced settings (an0n666)
 | 
				
			||||||
    - LINUX: Fix typo in systemd service file (Shane Allgeier)
 | 
					    - FEATURE: Add piece_extent_affinity to AdvancedSettings (FranciscoPombal)
 | 
				
			||||||
    - LINUX: Don't use HTML in tray tooltip (thalieht)
 | 
					    - FEATURE: Reorganize UI theme selection (Prince Gupta)
 | 
				
			||||||
    - LINUX: Don't create 'data' subdirectory in XDG_DATA_HOME (lbilli)
 | 
					    - FEATURE: Show any multiple connections from the same IP in peer list (thalieht)
 | 
				
			||||||
    - LINUX/MACOS: Add HTTPS tracker certificate validation option (NotTsunami)
 | 
					    - FEATURE: Add stalled filters to GUI and Web API/UI (FranciscoPombal)
 | 
				
			||||||
    - OTHER: Many CMake improvements (FranciscoPombal)
 | 
					    - FEATURE: Use IP geolocation database by DB-IP instead of MaxMind (sledgehammer999)
 | 
				
			||||||
    - OTHER: Support for libtorrent 1.1.x is dropped (Chocobo1)
 | 
					    - FEATURE: Allow to save downloaded metadata as torrent file (glassez)
 | 
				
			||||||
    - OTHER: Many code cleanups and improvements (FranciscoPombal, Chocobo1, glassez)
 | 
					    - FEATURE: Allow single app instance per configuration (glassez)
 | 
				
			||||||
 | 
					    - PERFORMANCE: Move multiple torrents one by one (glassez)
 | 
				
			||||||
 | 
					    - BUGFIX: Disable Torrent Queue by default for new users (an0n666)
 | 
				
			||||||
 | 
					    - BUGFIX: Update free disk space label on Category change in Auto Mode (Medvedishce)
 | 
				
			||||||
 | 
					    - BUGFIX: Save resume data after recheck (glassez)
 | 
				
			||||||
 | 
					    - BUGFIX: Tracker is errored only if all local endpoints fail (sledgehammer999)
 | 
				
			||||||
 | 
					    - BUGFIX: Change placement of stop tracker timeout setting (An0n)
 | 
				
			||||||
 | 
					    - BUGFIX: Redesign torrent startup handling (glassez)
 | 
				
			||||||
 | 
					    - BUGFIX: Show "∞" instead of " -1" in Preferences (Sakib-Abrar)
 | 
				
			||||||
 | 
					    - BUGFIX: Improve code efficiency for reverse resolution of peers (Chocobo1)
 | 
				
			||||||
 | 
					    - BUGFIX: Handle HTTP redirection to magnet URI (glassez)
 | 
				
			||||||
 | 
					    - BUGFIX: Various fixes for portable mode (Tester798)
 | 
				
			||||||
 | 
					    - BUGFIX: Include resume folder path in exception message (Chocobo1)
 | 
				
			||||||
 | 
					    - BUGFIX: Change placeholder text in torrent list's filter (djt3)
 | 
				
			||||||
 | 
					    - BUGFIX: Improvements in the embedded tracker to be more spec compliant (FranciscoPombal)
 | 
				
			||||||
 | 
					    - BUGFIX: Improve the options tooltips (NotTsunami)
 | 
				
			||||||
 | 
					    - BUGFIX: Check if file exists in seed mode (an0n666)
 | 
				
			||||||
 | 
					    - BUGFIX: Delegate GUI scaling work to Qt (Nick Korotysh)
 | 
				
			||||||
 | 
					    - BUGFIX: Fix crash when renaming torrent contents (Chocobo1)
 | 
				
			||||||
 | 
					    - BUGFIX: Fix total connected peers count calculation (FranciscoPombal)
 | 
				
			||||||
 | 
					    - BUGFIX: Allow other keypresses in LogListWidget (NotTsunami)
 | 
				
			||||||
 | 
					    - BUGFIX: Disable Auto TMM when not using default savepath from monitored folder (thalieht)
 | 
				
			||||||
 | 
					    - WEBUI: Fix first row renaming in files tab (Denis)
 | 
				
			||||||
 | 
					    - WEBUI: Use SVG image for WebUI favicon (Nick Korotysh)
 | 
				
			||||||
 | 
					    - WEBUI: Inherit text color for filter list elements (Nick Korotysh)
 | 
				
			||||||
 | 
					    - WEBUI: Expose WebUI ban counter to users (Chocobo1)
 | 
				
			||||||
 | 
					    - WEBUI: Expose WebUI ban duration to users (Chocobo1)
 | 
				
			||||||
 | 
					    - WEBUI: Implement "Secure" flag for session cookie (FranciscoPombal)
 | 
				
			||||||
 | 
					    - WEBUI: Remove unused/deprecated option (FranciscoPombal)
 | 
				
			||||||
 | 
					    - WEBUI: Prevent excessive sync requests (FranciscoPombal)
 | 
				
			||||||
 | 
					    - WEBUI: Fix populating statistics window (FranciscoPombal)
 | 
				
			||||||
 | 
					    - WEBUI: Fix matching uncategorized torrents (FranciscoPombal)
 | 
				
			||||||
 | 
					    - WEBUI: Always allow whitespace in category names (FranciscoPombal)
 | 
				
			||||||
 | 
					    - SEARCH: Bump python version for new installation (Chocobo1)
 | 
				
			||||||
 | 
					    - SEARCH: Fix missing string (Chocobo1)
 | 
				
			||||||
 | 
					    - SEARCH: Drop python2 support (Chocobo1)
 | 
				
			||||||
 | 
					    - WINDOWS: Installer: Option to start qBittorrent on Windows start up (An0n)
 | 
				
			||||||
 | 
					    - WINDOWS: Installer: Improve Czech translation (slrslr)
 | 
				
			||||||
 | 
					    - WINDOWS: Installer: Update French translation (zywo)
 | 
				
			||||||
 | 
					    - WINDOWS: Installer: Update German translation (schnurlos)
 | 
				
			||||||
 | 
					    - WINDOWS: Installer: Update Japanese translation (maboroshin)
 | 
				
			||||||
 | 
					    - WINDOWS: Path length limitation is removed on Windows 10 1607 onwards (an0n666)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Wed Dec 18 2019 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.2.1
 | 
				
			||||||
 | 
					    - FEATURE: Enable portable mode if "profile" directory exists (Tester798)
 | 
				
			||||||
 | 
					    - FEATURE: Enable "Apply rate limit to peers on LAN" option by default (Chocobo1)
 | 
				
			||||||
 | 
					    - BUGFIX: Sync translations from Transifex and run lupdate (sledgehammer999)
 | 
				
			||||||
 | 
					    - BUGFIX: Don't unnecessarily delete OS files in folders (sledgehammer999)
 | 
				
			||||||
 | 
					    - BUGFIX: Use the incomplete folder where appropriate (sledgehammer999)
 | 
				
			||||||
 | 
					    - BUGFIX: Align Properties tab bar correctly on window resize (Prince Gupta)
 | 
				
			||||||
 | 
					    - BUGFIX: Rework the listening IP/interface selection code (sledgehammer999)
 | 
				
			||||||
 | 
					    - BUGFIX: Fix inconsistent icon for deleting torrent (Chocobo1)
 | 
				
			||||||
 | 
					    - BUGFIX: Show torrent error message in transfer list (Chocobo1)
 | 
				
			||||||
 | 
					    - BUGFIX: Fix stuck in wrong torrent state (Chocobo1)
 | 
				
			||||||
 | 
					    - BUGFIX: Expand single-item folders in torrent content (warren)
 | 
				
			||||||
 | 
					    - WEBUI: Bump Web API version (sledgehammer999)
 | 
				
			||||||
 | 
					    - WEBUI: Add ability to rename torrent files from the WebUI (Thomas Piccirello)
 | 
				
			||||||
 | 
					    - WEBUI: Mention lack of HTTPS in WebUI magnet link warning (nl6720)
 | 
				
			||||||
 | 
					    - WEBUI: Fix HTML elements size in search tab (Chocobo1)
 | 
				
			||||||
 | 
					    - SEARCH: Fix incorrect translation displayed after language change (Chocobo1)
 | 
				
			||||||
 | 
					    - SEARCH: Fix missing translations in search plugins dialog (Chocobo1)
 | 
				
			||||||
 | 
					    - WINDOWS: Update russian translation of the installer (Andrei Stepanov)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Tue Dec 03 2019 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.2.0
 | 
					Tue Dec 03 2019 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.2.0
 | 
				
			||||||
    - FEATURE: Libtorrent 1.2.x series are supported now (glassez)
 | 
					    - FEATURE: Libtorrent 1.2.x series are supported now (glassez)
 | 
				
			||||||
@@ -86,7 +150,7 @@ Tue Dec 03 2019 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.2.0
 | 
				
			|||||||
    - BUGFIX: Remove the max half-open connections option (thalieht)
 | 
					    - BUGFIX: Remove the max half-open connections option (thalieht)
 | 
				
			||||||
    - BUGFIX: Center align the section labels in advanced settings (thalieht)
 | 
					    - BUGFIX: Center align the section labels in advanced settings (thalieht)
 | 
				
			||||||
    - BUGFIX: Add documentation links to some advanced settings (thalieht)
 | 
					    - BUGFIX: Add documentation links to some advanced settings (thalieht)
 | 
				
			||||||
    - BUGFIX: Improve DownloadManager code (glassez)
 | 
					    - BUGFIX: Impove DownloadManager code (glassez)
 | 
				
			||||||
    - BUGFIX: Limit DownloadHandler max redirection to 20 (Chocobo1)
 | 
					    - BUGFIX: Limit DownloadHandler max redirection to 20 (Chocobo1)
 | 
				
			||||||
    - BUGFIX: Log DownloadManager SSL errors (Chocobo1)
 | 
					    - BUGFIX: Log DownloadManager SSL errors (Chocobo1)
 | 
				
			||||||
    - BUGFIX: Force recheck multiple torrents one by one (glassez)
 | 
					    - BUGFIX: Force recheck multiple torrents one by one (glassez)
 | 
				
			||||||
@@ -317,10 +381,10 @@ Tue Dec 03 2019 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.2.0
 | 
				
			|||||||
    - BUGFIX: Restore torrent in two steps (glassez)
 | 
					    - BUGFIX: Restore torrent in two steps (glassez)
 | 
				
			||||||
    - BUGFIX: Improve scaling of speed graphs (dzmat)
 | 
					    - BUGFIX: Improve scaling of speed graphs (dzmat)
 | 
				
			||||||
    - BUGFIX: Add isNetworkFileSystem() detection on Windows. This allows network mounts to be monitored correctly by polling timer. (Chocobo1)
 | 
					    - BUGFIX: Add isNetworkFileSystem() detection on Windows. This allows network mounts to be monitored correctly by polling timer. (Chocobo1)
 | 
				
			||||||
    - BUGFIX: Reduce horizontal graphs resolution. Improves performance. (dzmat)
 | 
					    - BUGFIX: Reduce horizontal graphs resolution. Improves perfomance. (dzmat)
 | 
				
			||||||
    - BUGFIX: Don't recheck just checked torrent (mj-p, glassez)
 | 
					    - BUGFIX: Don't recheck just checked torrent (mj-p, glassez)
 | 
				
			||||||
    - BUGFIX: Add SMB2 magic number (Chocobo1)
 | 
					    - BUGFIX: Add SMB2 magic number (Chocobo1)
 | 
				
			||||||
    - BUGFIX: Restore startup performance to v4.1.2 times. Needs at least libtorrent 1.1.10 (sledgehammer999)
 | 
					    - BUGFIX: Restore startup perfomance to v4.1.2 times. Needs at least libtorrent 1.1.10 (sledgehammer999)
 | 
				
			||||||
    - BUGFIX: Make strings actually translatable (sledgehammer999)
 | 
					    - BUGFIX: Make strings actually translatable (sledgehammer999)
 | 
				
			||||||
    - WEBUI: Handle downloading .torrent file as success (Tom Piccirello)
 | 
					    - WEBUI: Handle downloading .torrent file as success (Tom Piccirello)
 | 
				
			||||||
    - WEBUI: Fix Alternative Web UI to be available (glassez)
 | 
					    - WEBUI: Fix Alternative Web UI to be available (glassez)
 | 
				
			||||||
@@ -391,7 +455,7 @@ Tue Dec 03 2019 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.2.0
 | 
				
			|||||||
    - BUGFIX: Improve torrent initialization (glassez)
 | 
					    - BUGFIX: Improve torrent initialization (glassez)
 | 
				
			||||||
    - BUGFIX: Save resume data on torrent change events (glassez)
 | 
					    - BUGFIX: Save resume data on torrent change events (glassez)
 | 
				
			||||||
    - BUGFIX: Increase default resume data save interval (Chocobo1)
 | 
					    - BUGFIX: Increase default resume data save interval (Chocobo1)
 | 
				
			||||||
    - BUGFIX: Work around crash when processing recursive download. Closes #9086 (Chocobo1)
 | 
					    - BUGFIX: Work around crash when procesing recursive download. Closes #9086 (Chocobo1)
 | 
				
			||||||
    - BUGFIX: Reduce queries to python version (Chocobo1)
 | 
					    - BUGFIX: Reduce queries to python version (Chocobo1)
 | 
				
			||||||
    - BUGFIX: Disable certain mouse wheel events in Options dialog (Chocobo1)
 | 
					    - BUGFIX: Disable certain mouse wheel events in Options dialog (Chocobo1)
 | 
				
			||||||
    - WEBUI: Send all rechecks in one request (Thomas Piccirello)
 | 
					    - WEBUI: Send all rechecks in one request (Thomas Piccirello)
 | 
				
			||||||
@@ -878,7 +942,7 @@ Tue Dec 03 2019 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.2.0
 | 
				
			|||||||
    - COSMETIC: Change RSS view layout to horizontal. Closes #5920. (Chocobo1)
 | 
					    - COSMETIC: Change RSS view layout to horizontal. Closes #5920. (Chocobo1)
 | 
				
			||||||
    - OSX: Fix crash on exit using Qt4. (Yez Ezey)
 | 
					    - OSX: Fix crash on exit using Qt4. (Yez Ezey)
 | 
				
			||||||
    - OSX: Change QSettings to IniFormat on macOS. Closes #5770 #5808. (Yez Ezey)
 | 
					    - OSX: Change QSettings to IniFormat on macOS. Closes #5770 #5808. (Yez Ezey)
 | 
				
			||||||
    - LINUX: Workaround a Qt5 bug which results in a flood of network interface change signals. (Eugene Shalygin)
 | 
					    - LINUX: Workaround a Qt5 bug which results in a flood of network interface change singals. (Eugene Shalygin)
 | 
				
			||||||
    - OTHER: Turkish translation for installer. (Burak Yavuz)
 | 
					    - OTHER: Turkish translation for installer. (Burak Yavuz)
 | 
				
			||||||
    - OTHER: Update portugueseBR for installer. (DaRKSoM)
 | 
					    - OTHER: Update portugueseBR for installer. (DaRKSoM)
 | 
				
			||||||
    - OTHER: Update portuguese for installer. (EdwardLinux)
 | 
					    - OTHER: Update portuguese for installer. (EdwardLinux)
 | 
				
			||||||
@@ -2225,7 +2289,7 @@ Tue Dec 03 2019 - sledgehammer999 <sledgehammer999@qbittorrent.org> - v4.2.0
 | 
				
			|||||||
    - FEATURE: Added "Unread" item to RSS feed list to display all unread news
 | 
					    - FEATURE: Added "Unread" item to RSS feed list to display all unread news
 | 
				
			||||||
    - FEATURE: If a torrent contains a torrent file, process downloaded torrent file too
 | 
					    - FEATURE: If a torrent contains a torrent file, process downloaded torrent file too
 | 
				
			||||||
    - FEATURE: A random listening port can be chosen automatically
 | 
					    - FEATURE: A random listening port can be chosen automatically
 | 
				
			||||||
    - BUGFIX: torrent resume code rewritten
 | 
					    - BUGFIX: torrent resume code rewrited
 | 
				
			||||||
    - BUGFIX: Fixed uTorrent spoofing code
 | 
					    - BUGFIX: Fixed uTorrent spoofing code
 | 
				
			||||||
    - BUGFIX: Greatly improved column sorting code
 | 
					    - BUGFIX: Greatly improved column sorting code
 | 
				
			||||||
    - BUGFIX: Possibility to create trackerless torrents
 | 
					    - BUGFIX: Possibility to create trackerless torrents
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										24
									
								
								INSTALL
									
									
									
									
									
								
							
							
						
						
									
										24
									
								
								INSTALL
									
									
									
									
									
								
							@@ -3,28 +3,22 @@ qBittorrent - A BitTorrent client in C++ / Qt
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
1) Install these dependencies:
 | 
					1) Install these dependencies:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  - Boost >= 1.65
 | 
					  - Boost >= 1.40
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  - libtorrent-rasterbar 1.2.14 - 1.2.x || 2.0.4 - 2.0.x
 | 
					  - libtorrent-rasterbar >= 1.1.10 (by Arvid Norberg)
 | 
				
			||||||
      * By Arvid Norberg, https://www.libtorrent.org/
 | 
					      * https://www.libtorrent.org/
 | 
				
			||||||
      * Be careful: another library (the one used by rTorrent) uses a similar name
 | 
					      * Be careful: another library (the one used by rTorrent) uses a similar name
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  - OpenSSL >= 1.1.1
 | 
					  - OpenSSL >= 1.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  - Qt 5.15.2 - 5.x
 | 
					  - Qt >= 5.9.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  - zlib >= 1.2.11
 | 
					  - zlib >= 1.2.5.2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  - pkg-config *
 | 
					  - pkg-config (compile-time only)
 | 
				
			||||||
      * Compile-time only on *nix systems
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  - Python >= 3.5.0
 | 
					  - Python >= 3.3.0 (optional, runtime only)
 | 
				
			||||||
      * Optional, run-time only
 | 
					      * Required by the internal search engine
 | 
				
			||||||
      * Used by the bundled search engine
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Dependency version numbers are bumped every once in a while to keep the range of properly tested configurations manageable, even if not strictly required to build.
 | 
					 | 
				
			||||||
You may be able to build with older versions of (some of) the dependencies other than the minimum versions specified in the build scripts, but support for such builds is not provided - you are on your own.
 | 
					 | 
				
			||||||
Please ensure you are building with an officially supported configuration when reporting bugs.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
2a) Compile and install qBittorrent with Qt graphical interface
 | 
					2a) Compile and install qBittorrent with Qt graphical interface
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,8 +1,8 @@
 | 
				
			|||||||
qBittorrent - A BitTorrent client in Qt
 | 
					qBittorrent - A BitTorrent client in Qt
 | 
				
			||||||
------------------------------------------
 | 
					------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[](https://travis-ci.org/qbittorrent/qBittorrent)
 | 
				
			||||||
[](https://ci.appveyor.com/project/qbittorrent/qBittorrent)
 | 
					[](https://ci.appveyor.com/project/qbittorrent/qBittorrent)
 | 
				
			||||||
[](https://github.com/qbittorrent/qBittorrent/actions)
 | 
					 | 
				
			||||||
[](https://scan.coverity.com/projects/5494)
 | 
					[](https://scan.coverity.com/projects/5494)
 | 
				
			||||||
********************************
 | 
					********************************
 | 
				
			||||||
### Description:
 | 
					### Description:
 | 
				
			||||||
@@ -45,8 +45,8 @@ http://forum.qbittorrent.org
 | 
				
			|||||||
Please report any bug (or feature request) to:
 | 
					Please report any bug (or feature request) to:
 | 
				
			||||||
http://bugs.qbittorrent.org
 | 
					http://bugs.qbittorrent.org
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Official IRC channel:
 | 
					You can also meet me (sledgehammer_999) on IRC:
 | 
				
			||||||
`#qbittorrent on irc.libera.chat`
 | 
					`#qbittorrent on irc.freenode.net`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
------------------------------------------
 | 
					------------------------------------------
 | 
				
			||||||
sledgehammer999 <sledgehammer999@qbittorrent.org>
 | 
					sledgehammer999 <sledgehammer999@qbittorrent.org>
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										1
									
								
								TODO
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								TODO
									
									
									
									
									
								
							@@ -1 +1,2 @@
 | 
				
			|||||||
See https://blueprints.launchpad.net/qbittorrent/
 | 
					See https://blueprints.launchpad.net/qbittorrent/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,19 +0,0 @@
 | 
				
			|||||||
#!/bin/sh
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# get version numbers
 | 
					 | 
				
			||||||
versionSrc="src/base/version.h.in"
 | 
					 | 
				
			||||||
versionMajor="$(grep -Po '(?<=QBT_VERSION_MAJOR )\d+' "$versionSrc")"
 | 
					 | 
				
			||||||
versionMinor="$(grep -Po '(?<=QBT_VERSION_MINOR )\d+' "$versionSrc")"
 | 
					 | 
				
			||||||
versionBugfix="$(grep -Po '(?<=QBT_VERSION_BUGFIX )\d+' "$versionSrc")"
 | 
					 | 
				
			||||||
versionBuild="$(grep -Po '(?<=QBT_VERSION_BUILD )\d+' "$versionSrc")"
 | 
					 | 
				
			||||||
versionStatus="$(grep -Po '(?<=QBT_VERSION_STATUS ")\w+' "$versionSrc")"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if [ "$versionBuild" != "0" ]; then
 | 
					 | 
				
			||||||
    projectVersion="$versionMajor.$versionMinor.$versionBugfix.$versionBuild$versionStatus"
 | 
					 | 
				
			||||||
else
 | 
					 | 
				
			||||||
    projectVersion="$versionMajor.$versionMinor.$versionBugfix$versionStatus"
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# pack archives
 | 
					 | 
				
			||||||
git archive --format=tar --prefix="qbittorrent-$projectVersion/" HEAD | gzip -9 > "qbittorrent-$projectVersion.tar.gz"
 | 
					 | 
				
			||||||
git archive --format=tar --prefix="qbittorrent-$projectVersion/" HEAD | xz -9 > "qbittorrent-$projectVersion.tar.xz"
 | 
					 | 
				
			||||||
							
								
								
									
										22
									
								
								cmake/Modules/CompileFeature.cmake
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								cmake/Modules/CompileFeature.cmake
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,22 @@
 | 
				
			|||||||
 | 
					# Helper function for coupling add_feature_info(), option(), and add_definitions()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function(optional_compile_definitions _name)
 | 
				
			||||||
 | 
					    set(options FEATURE)
 | 
				
			||||||
 | 
					    set(oneValueArgs DESCRIPTION DEFAULT)
 | 
				
			||||||
 | 
					    set(multiValueArgs ENABLED DISABLED)
 | 
				
			||||||
 | 
					    cmake_parse_arguments(OCD "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
 | 
				
			||||||
 | 
					    option(${_name} "${OCD_DESCRIPTION}" ${OCD_DEFAULT})
 | 
				
			||||||
 | 
					    if (${${_name}})
 | 
				
			||||||
 | 
					        set_property(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" APPEND PROPERTY COMPILE_DEFINITIONS ${OCD_ENABLED})
 | 
				
			||||||
 | 
					    else()
 | 
				
			||||||
 | 
					        set_property(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" APPEND PROPERTY COMPILE_DEFINITIONS ${OCD_DISABLED})
 | 
				
			||||||
 | 
					    endif()
 | 
				
			||||||
 | 
					    if(${OCD_FEATURE})
 | 
				
			||||||
 | 
					        add_feature_info(${_name} ${_name} "${OCD_DESCRIPTION}")
 | 
				
			||||||
 | 
					    endif()
 | 
				
			||||||
 | 
					endfunction()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					macro(feature_option _name _description _default)
 | 
				
			||||||
 | 
					    option(${_name} "${_description}" ${_default})
 | 
				
			||||||
 | 
					    add_feature_info(${_name} ${_name} "${_description}")
 | 
				
			||||||
 | 
					endmacro()
 | 
				
			||||||
							
								
								
									
										355
									
								
								cmake/Modules/DeployQt5.cmake
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										355
									
								
								cmake/Modules/DeployQt5.cmake
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -1,14 +0,0 @@
 | 
				
			|||||||
# Helper functions for coupling add_feature_info() or CMAKE_DEPENDENT_OPTION() and option()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function(feature_option _name _description _default)
 | 
					 | 
				
			||||||
    string(CONCAT _desc "${_description} (default: ${_default})")
 | 
					 | 
				
			||||||
    option("${_name}" "${_desc}" "${_default}")
 | 
					 | 
				
			||||||
    add_feature_info("${_name}" "${_name}" "${_desc}")
 | 
					 | 
				
			||||||
endfunction()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
include(CMakeDependentOption)
 | 
					 | 
				
			||||||
function(feature_option_dependent _name _description _default_opt _dependency _default_dep_not_sat)
 | 
					 | 
				
			||||||
    string(CONCAT _desc "${_description} (default: ${_default_opt}; depends on condition: ${_dependency})")
 | 
					 | 
				
			||||||
    CMAKE_DEPENDENT_OPTION("${_name}" "${_desc}" "${_default_opt}" "${_dependency}" "${_default_dep_not_sat}")
 | 
					 | 
				
			||||||
    add_feature_info("${_name}" "${_name}" "${_desc}")
 | 
					 | 
				
			||||||
endfunction()
 | 
					 | 
				
			||||||
							
								
								
									
										129
									
								
								cmake/Modules/FindLibtorrentRasterbar.cmake
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										129
									
								
								cmake/Modules/FindLibtorrentRasterbar.cmake
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,129 @@
 | 
				
			|||||||
 | 
					# - Try to find libtorrent-rasterbar
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# If not using pkg-config, you can pre-set LibtorrentRasterbar_CUSTOM_DEFINITIONS
 | 
				
			||||||
 | 
					# for definitions unrelated to Boost's separate compilation (which are already
 | 
				
			||||||
 | 
					# decided by the LibtorrentRasterbar_USE_STATIC_LIBS variable).
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Once done this will define
 | 
				
			||||||
 | 
					#  LibtorrentRasterbar_FOUND - System has libtorrent-rasterbar
 | 
				
			||||||
 | 
					#  LibtorrentRasterbar_INCLUDE_DIRS - The libtorrent-rasterbar include directories
 | 
				
			||||||
 | 
					#  LibtorrentRasterbar_LIBRARIES - The libraries needed to use libtorrent-rasterbar
 | 
				
			||||||
 | 
					#  LibtorrentRasterbar_DEFINITIONS - Compiler switches required for using libtorrent-rasterbar
 | 
				
			||||||
 | 
					#  LibtorrentRasterbar_OPENSSL_ENABLED - libtorrent-rasterbar uses and links against OpenSSL
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					find_package(Threads REQUIRED)
 | 
				
			||||||
 | 
					find_package(PkgConfig QUIET)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					macro(_detect_boost_components _outComponets librariesList)
 | 
				
			||||||
 | 
					    string(REGEX MATCHALL "boost_[a-z_]+[-a-z]*" _boost_libraries "${librariesList}")
 | 
				
			||||||
 | 
					    string(REGEX REPLACE "boost_([a-z_]+)[-a-z]*" "\\1" ${_outComponets} "${_boost_libraries}")
 | 
				
			||||||
 | 
					endmacro()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if(PKG_CONFIG_FOUND)
 | 
				
			||||||
 | 
					    pkg_check_modules(PC_LIBTORRENT_RASTERBAR QUIET libtorrent-rasterbar)
 | 
				
			||||||
 | 
					endif()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if(LibtorrentRasterbar_USE_STATIC_LIBS)
 | 
				
			||||||
 | 
					    set(LibtorrentRasterbar_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
 | 
				
			||||||
 | 
					    set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_STATIC_LIBRARY_SUFFIX})
 | 
				
			||||||
 | 
					endif()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if(PC_LIBTORRENT_RASTERBAR_FOUND)
 | 
				
			||||||
 | 
					    set(LibtorrentRasterbar_DEFINITIONS ${PC_LIBTORRENT_RASTERBAR_CFLAGS})
 | 
				
			||||||
 | 
					else()
 | 
				
			||||||
 | 
					    if(LibtorrentRasterbar_CUSTOM_DEFINITIONS)
 | 
				
			||||||
 | 
					        set(LibtorrentRasterbar_DEFINITIONS ${LibtorrentRasterbar_CUSTOM_DEFINITIONS})
 | 
				
			||||||
 | 
					    else()
 | 
				
			||||||
 | 
					        # Without pkg-config, we can't possibly figure out the correct build flags.
 | 
				
			||||||
 | 
					        # libtorrent is very picky about those. Let's take a set of defaults and
 | 
				
			||||||
 | 
					        # hope that they apply. If not, you the user are on your own.
 | 
				
			||||||
 | 
					        set(LibtorrentRasterbar_DEFINITIONS
 | 
				
			||||||
 | 
					            -DTORRENT_USE_LIBCRYPTO
 | 
				
			||||||
 | 
					            # TODO: remove the following define as it is not used since OpenSSL >= 1.1
 | 
				
			||||||
 | 
					            -DTORRENT_USE_OPENSSL
 | 
				
			||||||
 | 
					            -DBOOST_ASIO_ENABLE_CANCELIO
 | 
				
			||||||
 | 
					            -DUNICODE -D_UNICODE -D_FILE_OFFSET_BITS=64)
 | 
				
			||||||
 | 
					    endif()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if(NOT LibtorrentRasterbar_USE_STATIC_LIBS)
 | 
				
			||||||
 | 
					        list(APPEND LibtorrentRasterbar_DEFINITIONS
 | 
				
			||||||
 | 
					            -DTORRENT_LINKING_SHARED
 | 
				
			||||||
 | 
					            -DBOOST_SYSTEM_DYN_LINK)
 | 
				
			||||||
 | 
					    endif()
 | 
				
			||||||
 | 
					endif()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					message(STATUS "libtorrent definitions: ${LibtorrentRasterbar_DEFINITIONS}")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					find_path(LibtorrentRasterbar_INCLUDE_DIR libtorrent
 | 
				
			||||||
 | 
					          HINTS ${PC_LIBTORRENT_RASTERBAR_INCLUDEDIR} ${PC_LIBTORRENT_RASTERBAR_INCLUDE_DIRS}
 | 
				
			||||||
 | 
					          PATH_SUFFIXES libtorrent-rasterbar)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					find_library(LibtorrentRasterbar_LIBRARY NAMES torrent-rasterbar libtorrent
 | 
				
			||||||
 | 
					             HINTS ${PC_LIBTORRENT_RASTERBAR_LIBDIR} ${PC_LIBTORRENT_RASTERBAR_LIBRARY_DIRS})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if(LibtorrentRasterbar_USE_STATIC_LIBS)
 | 
				
			||||||
 | 
					    set(CMAKE_FIND_LIBRARY_SUFFIXES ${LibtorrentRasterbar_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES})
 | 
				
			||||||
 | 
					endif()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					set(LibtorrentRasterbar_LIBRARIES ${LibtorrentRasterbar_LIBRARY} ${CMAKE_THREAD_LIBS_INIT})
 | 
				
			||||||
 | 
					set(LibtorrentRasterbar_INCLUDE_DIRS ${LibtorrentRasterbar_INCLUDE_DIR})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Without pkg-config, we can't possibly figure out the correct boost dependencies
 | 
				
			||||||
 | 
					if (LibtorrentRasterbar_CUSTOM_BOOST_DEPENDENCIES)
 | 
				
			||||||
 | 
					    set(_boost_components "${LibtorrentRasterbar_CUSTOM_BOOST_DEPENDENCIES}")
 | 
				
			||||||
 | 
					else(LibtorrentRasterbar_CUSTOM_BOOST_DEPENDENCIES)
 | 
				
			||||||
 | 
					    if(PC_LIBTORRENT_RASTERBAR_FOUND)
 | 
				
			||||||
 | 
					        _detect_boost_components(_boost_components "${PC_LIBTORRENT_RASTERBAR_LIBRARIES}")
 | 
				
			||||||
 | 
					    else()
 | 
				
			||||||
 | 
					        # all possible boost dependencies
 | 
				
			||||||
 | 
					        set(_boost_components
 | 
				
			||||||
 | 
					            date_time
 | 
				
			||||||
 | 
					            system
 | 
				
			||||||
 | 
					            chrono
 | 
				
			||||||
 | 
					            random
 | 
				
			||||||
 | 
					            thread
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					    endif()
 | 
				
			||||||
 | 
					endif(LibtorrentRasterbar_CUSTOM_BOOST_DEPENDENCIES)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					list(SORT _boost_components)
 | 
				
			||||||
 | 
					message(STATUS "Libtorrent Boost dependencies: ${_boost_components}")
 | 
				
			||||||
 | 
					find_package(Boost REQUIRED COMPONENTS ${_boost_components})
 | 
				
			||||||
 | 
					set(LibtorrentRasterbar_LIBRARIES ${LibtorrentRasterbar_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
 | 
				
			||||||
 | 
					foreach(_boost_cmpnt IN LISTS _boost_components)
 | 
				
			||||||
 | 
					    list(APPEND LibtorrentRasterbar_LIBRARIES "Boost::${_boost_cmpnt}")
 | 
				
			||||||
 | 
					endforeach(_boost_cmpnt)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					set(LibtorrentRasterbar_INCLUDE_DIRS ${LibtorrentRasterbar_INCLUDE_DIRS})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					list(FIND LibtorrentRasterbar_DEFINITIONS -DTORRENT_USE_OPENSSL LibtorrentRasterbar_ENCRYPTION_INDEX)
 | 
				
			||||||
 | 
					if(LibtorrentRasterbar_ENCRYPTION_INDEX GREATER -1)
 | 
				
			||||||
 | 
					    find_package(OpenSSL REQUIRED)
 | 
				
			||||||
 | 
					    set(LibtorrentRasterbar_LIBRARIES ${LibtorrentRasterbar_LIBRARIES} OpenSSL::SSL OpenSSL::Crypto)
 | 
				
			||||||
 | 
					    list(APPEND LibtorrentRasterbar_INCLUDE_DIRS "${OPENSSL_INCLUDE_DIR}")
 | 
				
			||||||
 | 
					    set(LibtorrentRasterbar_OPENSSL_ENABLED ON)
 | 
				
			||||||
 | 
					endif()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					include(FindPackageHandleStandardArgs)
 | 
				
			||||||
 | 
					# handle the QUIETLY and REQUIRED arguments and set LibtorrentRasterbar_FOUND to TRUE
 | 
				
			||||||
 | 
					# if all listed variables are TRUE
 | 
				
			||||||
 | 
					find_package_handle_standard_args(LibtorrentRasterbar DEFAULT_MSG
 | 
				
			||||||
 | 
					                                  LibtorrentRasterbar_LIBRARY
 | 
				
			||||||
 | 
					                                  LibtorrentRasterbar_INCLUDE_DIR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					mark_as_advanced(LibtorrentRasterbar_INCLUDE_DIR LibtorrentRasterbar_LIBRARY
 | 
				
			||||||
 | 
					    LibtorrentRasterbar_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES
 | 
				
			||||||
 | 
					    LibtorrentRasterbar_ENCRYPTION_INDEX)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if (LibtorrentRasterbar_FOUND AND NOT TARGET LibtorrentRasterbar::torrent-rasterbar)
 | 
				
			||||||
 | 
					    add_library(LibtorrentRasterbar::torrent-rasterbar UNKNOWN IMPORTED)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    set_target_properties(LibtorrentRasterbar::torrent-rasterbar PROPERTIES
 | 
				
			||||||
 | 
					        IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
 | 
				
			||||||
 | 
					        IMPORTED_LOCATION "${LibtorrentRasterbar_LIBRARY}"
 | 
				
			||||||
 | 
					        INTERFACE_INCLUDE_DIRECTORIES "${LibtorrentRasterbar_INCLUDE_DIRS}"
 | 
				
			||||||
 | 
					        INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "${LibtorrentRasterbar_INCLUDE_DIRS}"
 | 
				
			||||||
 | 
					        INTERFACE_LINK_LIBRARIES "${LibtorrentRasterbar_LIBRARIES}"
 | 
				
			||||||
 | 
					        INTERFACE_COMPILE_OPTIONS "${LibtorrentRasterbar_DEFINITIONS}"
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					endif()
 | 
				
			||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user