You've already forked qBittorrent
							
							
				mirror of
				https://github.com/qbittorrent/qBittorrent
				synced 2025-10-30 23:30:54 +01:00 
			
		
		
		
	Compare commits
	
		
			381 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 01519b5e77 | ||
|   | 95ad606db1 | ||
|   | 7a31c4c1fd | ||
|   | 74b4c24c8f | ||
|   | fac91a29e8 | ||
|   | a58cfe3f00 | ||
|   | 1bae770b2c | ||
|   | 298d63d47c | ||
|   | c598bdd290 | ||
|   | 8ba8d69bef | ||
|   | 57ec71b4d3 | ||
|   | c561c28614 | ||
|   | ac5c264e66 | ||
|   | 338d9a0848 | ||
|   | 0efd667d7e | ||
|   | 5fd6e18390 | ||
|   | b5f4afabe0 | ||
|   | 9392ce436d | ||
|   | 8ceb2d8832 | ||
|   | 40ec873199 | ||
|   | f3a5a43a20 | ||
|   | 72ba22afd1 | ||
|   | 423232b4b9 | ||
|   | 86a6b53f82 | ||
|   | 618afb3609 | ||
|   | fefce03379 | ||
|   | 250cac73b6 | ||
|   | 84ec5a6acf | ||
|   | 0e2aca7583 | ||
|   | 3bded7e71b | ||
|   | 51ca65eea1 | ||
|   | f21f7b8edc | ||
|   | 331304159d | ||
|   | 2aab675dc4 | ||
|   | 9c8016dc65 | ||
|   | b99262bc36 | ||
|   | 078cfe656a | ||
|   | 89ac9bf2c9 | ||
|   | 81932b6313 | ||
|   | 4ce5d9d5e2 | ||
|   | 0415c0c6f8 | ||
|   | def5765160 | ||
|   | 9977395c03 | ||
|   | 2b05b2b471 | ||
|   | d1bd426618 | ||
|   | b84c5edf51 | ||
|   | 3ac8c97e6f | ||
|   | ede42910da | ||
|   | 500d0e717b | ||
|   | a3f039ffcb | ||
|   | 81ad324209 | ||
|   | 81de07789a | ||
|   | 6a8a1f602f | ||
|   | 9dfaaa2dd1 | ||
|   | c06d6eaa77 | ||
|   | d198ee97a5 | ||
|   | ac8105c304 | ||
|   | 6cb16cfbb7 | ||
|   | 2b475c4296 | ||
|   | 3a9e4397fd | ||
|   | 1ce0bb7cee | ||
|   | dd4b09f3a9 | ||
|   | 8c2df049f1 | ||
|   | 8b66c444ee | ||
|   | 0ccbdbccf4 | ||
|   | d08b6c81ba | ||
|   | 5f897709cf | ||
|   | e25948e737 | ||
|   | 144956a209 | ||
|   | 667d4e4211 | ||
|   | d957eef331 | ||
|   | baa32a20e0 | ||
|   | eff465126e | ||
|   | 09089b2d33 | ||
|   | 3aa36ad40c | ||
|   | 24bc5a9875 | ||
|   | 744a2cb5a3 | ||
|   | 33e090cfcb | ||
|   | 063844ed44 | ||
|   | 899f8a3f61 | ||
|   | 0f72f22096 | ||
|   | ffda0ab0ac | ||
|   | 21f18623db | ||
|   | c4265db0fd | ||
|   | bc8d9656f6 | ||
|   | bd284facbd | ||
|   | 7eb77cbcbd | ||
|   | 86e96b819e | ||
|   | 132be7ee9d | ||
|   | 9f8a6e8fb1 | ||
|   | e6447c8f28 | ||
|   | 7dd9e73431 | ||
|   | ea82962c5d | ||
|   | b2a43eeffc | ||
|   | 681347148d | ||
|   | 1f63490755 | ||
|   | 0140ed356f | ||
|   | 2c8f322af5 | ||
|   | 6f31ebd899 | ||
|   | 014df529c5 | ||
|   | 482dad00fd | ||
|   | 7898037006 | ||
|   | 5c819ee384 | ||
|   | a590e7139b | ||
|   | 89a8e07217 | ||
|   | 5c05bdaa27 | ||
|   | 7006afc611 | ||
|   | 9cb3a6d29e | ||
|   | 2b6baa6099 | ||
|   | 8881035b7a | ||
|   | 2be30a50ef | ||
|   | 81a7b0c034 | ||
|   | e7235cc3f8 | ||
|   | 1570b51f6c | ||
|   | 6272c6d95d | ||
|   | 473ae25fd8 | ||
|   | 42d7d9b5f4 | ||
|   | 0f77b00428 | ||
|   | 060804d3b8 | ||
|   | f8b6cb4879 | ||
|   | a6d27223db | ||
|   | bb32b88a62 | ||
|   | 332b173e08 | ||
|   | e921cf677a | ||
|   | 973b5a4809 | ||
|   | 688e11a911 | ||
|   | f7e6b96493 | ||
|   | 88bf6f11c7 | ||
|   | 90e2236990 | ||
|   | 6ad7cadc4b | ||
|   | 0499111156 | ||
|   | ae44e59c9a | ||
|   | 1de52f9bcf | ||
|   | 448e55031e | ||
|   | 3b748178c2 | ||
|   | a4a54ce712 | ||
|   | d19b524d2d | ||
|   | 1e2bf50e66 | ||
|   | e7f3409053 | ||
|   | 9758633eeb | ||
|   | 3def5e40c4 | ||
|   | ca923ed02c | ||
|   | e4c3bad93a | ||
|   | 3b52c5ce97 | ||
|   | 44b94803a4 | ||
|   | 5d4644c4fc | ||
|   | a2ef115c66 | ||
|   | 1356f200b8 | ||
|   | 3c68896b1d | ||
|   | 265da50791 | ||
|   | 4037143f4e | ||
|   | 8cae8ad5c5 | ||
|   | 50bd845682 | ||
|   | ed5aa07526 | ||
|   | 437b51b3a5 | ||
|   | c2ccc9dfa4 | ||
|   | b2c7d8211f | ||
|   | 726455ac3e | ||
|   | ae2bb4efeb | ||
|   | 9971329121 | ||
|   | d0ec1c4a86 | ||
|   | 9c55600d81 | ||
|   | b45fb74e01 | ||
|   | f16c585a77 | ||
|   | 9c664d04ae | ||
|   | 3d0ca83474 | ||
|   | e713ffb064 | ||
|   | cf1e61bcf5 | ||
|   | 42b22d6645 | ||
|   | 2d607f8c1a | ||
|   | 69256905c2 | ||
|   | 305316b1fc | ||
|   | 27e222455b | ||
|   | 2b18318e0c | ||
|   | 49cadce253 | ||
|   | f1b908b95b | ||
|   | 4acfcef8da | ||
|   | 69f2196a22 | ||
|   | b20a3c5b8e | ||
|   | 2c5271b3b2 | ||
|   | 7696895a88 | ||
|   | c1ae5d2572 | ||
|   | 0e635c7fdd | ||
|   | 58345e5bbf | ||
|   | 89382d4ec2 | ||
|   | 372f5af36b | ||
|   | f38736729d | ||
|   | bf67ef21c6 | ||
|   | cfd40adcb5 | ||
|   | 8210f9841e | ||
|   | ae3d17ec01 | ||
|   | 349e958be3 | ||
|   | 42acc75394 | ||
|   | 8b91dcedb0 | ||
|   | a454a0303d | ||
|   | 789c6de2e8 | ||
|   | c2fb51159f | ||
|   | bfb0afe3cf | ||
|   | 26a2d4f24d | ||
|   | f6e88c8c55 | ||
|   | 51033c212a | ||
|   | 16c858cf61 | ||
|   | 0496543fce | ||
|   | 746e8a7be1 | ||
|   | 6d301ccf55 | ||
|   | d441b18da0 | ||
|   | 13023ba70a | ||
|   | ecb7c02d4c | ||
|   | fd1ac43157 | ||
|   | c6d4a1f7d4 | ||
|   | 01110690da | ||
|   | c998c7d38d | ||
|   | 230f98da4a | ||
|   | c86db0004f | ||
|   | e645514c8f | ||
|   | f3c9dbd512 | ||
|   | ef650293e3 | ||
|   | 05e217537c | ||
|   | 13cb3b5ca1 | ||
|   | da0b276d5f | ||
|   | 2d73bc9e7d | ||
|   | fdd54fe568 | ||
|   | e5ce24e55e | ||
|   | d90349709b | ||
|   | adb0fe6582 | ||
|   | 5ed81580c9 | ||
|   | 86d6fb86d7 | ||
|   | ddec247d4f | ||
|   | d431ecbe00 | ||
|   | be929ed88c | ||
|   | 2e1f9bf8be | ||
|   | 7fff393b0e | ||
|   | a669ec49ad | ||
|   | 1880082017 | ||
|   | 0cbd15890a | ||
|   | 7fe7c6c277 | ||
|   | e4c177fec7 | ||
|   | 77f4e6c2cf | ||
|   | 4563b11a2e | ||
|   | cb477f9a29 | ||
|   | 58ac07667e | ||
|   | 74bf3af41c | ||
|   | 9317071122 | ||
|   | dab32f2090 | ||
|   | dc464d4d41 | ||
|   | e7e3f6a9db | ||
|   | 5a1c4e79b3 | ||
|   | c6d9ab6810 | ||
|   | d7afad835e | ||
|   | 8608d7b9da | ||
|   | 72970602af | ||
|   | 86579ca87d | ||
|   | e55582124c | ||
|   | bd8b06c607 | ||
|   | 230fedf069 | ||
|   | 7bea10f507 | ||
|   | 7cde969b90 | ||
|   | a3b8f6880b | ||
|   | ad79fc8d43 | ||
|   | fb4bf94a56 | ||
|   | 1c184944fd | ||
|   | ec420f6617 | ||
|   | d908227619 | ||
|   | ac8167410b | ||
|   | 26ce187b30 | ||
|   | 2c4e04e537 | ||
|   | b418f65c2f | ||
|   | dd3a8d5d56 | ||
|   | 49e54a55df | ||
|   | 8cd0a7ae85 | ||
|   | 442f0df613 | ||
|   | f9ee5bdb59 | ||
|   | b9602cc6ab | ||
|   | abb854a1e6 | ||
|   | 4ee17a73d0 | ||
|   | faf6e82274 | ||
|   | c08ec1ac5e | ||
|   | cd0b6d9a43 | ||
|   | b8f1142abe | ||
|   | 78859415d6 | ||
|   | ef92c17192 | ||
|   | 22f3abc4b5 | ||
|   | a56e6294c1 | ||
|   | 77909e0093 | ||
|   | 2c2bb14b2a | ||
|   | 73c8b77464 | ||
|   | 042238db87 | ||
|   | 6e267f8e81 | ||
|   | fdc64d9b38 | ||
|   | 0b42425db5 | ||
|   | e5d7738127 | ||
|   | 422489e2a1 | ||
|   | 7de983b4e5 | ||
|   | e4e55d2a80 | ||
|   | 926012ce71 | ||
|   | 487eb554c9 | ||
|   | 5a96e1fc7a | ||
|   | 2fe698ee60 | ||
|   | 177ac32a5e | ||
|   | 5f34d1555b | ||
|   | 7cfe68f46c | ||
|   | f94f4d2391 | ||
|   | 73b18d7ef3 | ||
|   | 817e9c4747 | ||
|   | 28844eff44 | ||
|   | 389664213b | ||
|   | 953b6fd6f8 | ||
|   | 9b4f3fcbf8 | ||
|   | 80743180be | ||
|   | b2847b2381 | ||
|   | eb657ec032 | ||
|   | fc2be601df | ||
|   | 5786c7ff11 | ||
|   | 4a183dd968 | ||
|   | 7c10dba10c | ||
|   | 894446d308 | ||
|   | 47e9c5ac08 | ||
|   | 7f47ac11f1 | ||
|   | 67b17891fa | ||
|   | dd5b7ba05b | ||
|   | 61aa4d9f1c | ||
|   | 6e924b668e | ||
|   | 618ce33fa0 | ||
|   | ac413c76b9 | ||
|   | f266184514 | ||
|   | 8c48bf4a70 | ||
|   | 8bee69c9fc | ||
|   | 5876886345 | ||
|   | 0392bfce3c | ||
|   | c66cf43d6a | ||
|   | 7515afc058 | ||
|   | 5fcfcc901e | ||
|   | 1728c16580 | ||
|   | d3f46452a9 | ||
|   | 7092a98c93 | ||
|   | 8e19f66b4f | ||
|   | b6ab2abf3f | ||
|   | 3edaaa30c9 | ||
|   | 38efff461e | ||
|   | 2179148b8d | ||
|   | f92c4c0a40 | ||
|   | 1e7f792dbb | ||
|   | 1d4af505c2 | ||
|   | baa609b713 | ||
|   | bc20cf9ad7 | ||
|   | 7d3ecfa9a6 | ||
|   | 88a90ed7d4 | ||
|   | 3e540b3f51 | ||
|   | 87e1661bd5 | ||
|   | f82a4051af | ||
|   | 5730e917a1 | ||
|   | 5e7d7c2ef0 | ||
|   | 2b6e1953d7 | ||
|   | 6fc50f4169 | ||
|   | 40d7a53695 | ||
|   | 7e89893454 | ||
|   | d83f09e731 | ||
|   | 36575b225d | ||
|   | fe0ea843e0 | ||
|   | a8911f8136 | ||
|   | c5ef1a0207 | ||
|   | 102d628c0a | ||
|   | 6ea3acdaea | ||
|   | 621578353d | ||
|   | ca776c3036 | ||
|   | 9d27eb3b57 | ||
|   | 9171dffe97 | ||
|   | f919d4f5bf | ||
|   | 59afc7c520 | ||
|   | f02b65b866 | ||
|   | 891c471160 | ||
|   | f49f5ba9a1 | ||
|   | 539b3b7c3e | ||
|   | 83ce285138 | ||
|   | 260e48b705 | ||
|   | f09ee1b398 | ||
|   | e3c2266611 | ||
|   | 53fb6220c5 | ||
|   | 34e6b73374 | ||
|   | b925cffddb | ||
|   | 3595626eff | 
							
								
								
									
										59
									
								
								.appveyor.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								.appveyor.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,59 @@ | ||||
| version: '{branch}-{build}' | ||||
|  | ||||
| # Do not build on tags (GitHub only) | ||||
| skip_tags: true | ||||
|  | ||||
| image: Visual Studio 2019 | ||||
|  | ||||
| branches: | ||||
|   except:  # blacklist | ||||
|     - coverity_scan | ||||
|  | ||||
| environment: | ||||
|   REPO_DIR: &REPO_DIR c:\qbittorrent | ||||
|   CACHE_DIR: &CACHE_DIR c:\qbt_cache | ||||
|  | ||||
|   QBT_VER_URL: https://builds.shiki.hu/appveyor/version | ||||
|   QBT_LIB_URL: https://builds.shiki.hu/appveyor/qbt_libraries.7z | ||||
|  | ||||
| # project directory | ||||
| clone_folder: *REPO_DIR | ||||
|  | ||||
| # cache size should < 100MB (after compressing with fastest option): | ||||
| # see: https://www.appveyor.com/docs/build-cache#save-update-cache-before-build-finishes | ||||
| cache: | ||||
|   - *CACHE_DIR | ||||
|  | ||||
| clone_depth: 50 | ||||
|  | ||||
| install: | ||||
|   # check if library needs update | ||||
|   - appveyor DownloadFile "%QBT_VER_URL%" -FileName "c:\version_new" && SET /P newVersion=<"c:\version_new" | ||||
|   - IF EXIST "%CACHE_DIR%\version" (SET /P oldVersion=<"%CACHE_DIR%\version") | ||||
|   - IF NOT EXIST "%CACHE_DIR%\version" (SET updateCache=1) | ||||
|   - IF NOT "%oldVersion%" == "%newVersion%" (SET updateCache=1) | ||||
|   # update library | ||||
|   - IF "%updateCache%" == "1" (ECHO "--- Will redownload libraries ---" && | ||||
|       RMDIR /S /Q "%CACHE_DIR%" & MKDIR "%CACHE_DIR%" && | ||||
|       appveyor DownloadFile "%QBT_LIB_URL%" -FileName "c:\qbt_lib.7z" && 7z x "c:\qbt_lib.7z" -o"%CACHE_DIR%" > nul && | ||||
|       COPY "c:\version_new" "%CACHE_DIR%\version") | ||||
|   # Qt stay compressed in cache | ||||
|   - 7z x "%CACHE_DIR%\qt5_32.7z" -o"c:\qbt" > nul | ||||
|  | ||||
| before_build: | ||||
|   # setup env | ||||
|   - CALL "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars32.bat" | ||||
|   - SET PATH=%PATH%;c:\qbt\qt5_32\bin;%CACHE_DIR%\jom; | ||||
|   # setup project | ||||
|   - COPY /Y "%CACHE_DIR%\conf.pri" "%REPO_DIR%" | ||||
|   # workarounds | ||||
|   - MKLINK /J "c:\qbt\base" "%CACHE_DIR%\base" | ||||
|  | ||||
| build_script: | ||||
|   - cd "%REPO_DIR%" | ||||
|   # scan only as lupdate is prone to hang | ||||
|   - lupdate -extensions c,cpp,h,hpp,ui . | ||||
|   - qmake qbittorrent.pro && cd src && qmake src.pro | ||||
|   - jom -j2 -f Makefile.Release | ||||
|  | ||||
| test: off | ||||
							
								
								
									
										81
									
								
								.clang-tidy
									
									
									
									
									
								
							
							
						
						
									
										81
									
								
								.clang-tidy
									
									
									
									
									
								
							| @@ -1,81 +0,0 @@ | ||||
| Checks: > | ||||
|   bugprone-*, | ||||
|   cert-*, | ||||
|   concurrency-*, | ||||
|   cppcoreguidelines-*, | ||||
|   misc-*, | ||||
|   modernize-*, | ||||
|   performance-*, | ||||
|   portability-*, | ||||
|   readability-*, | ||||
|   -# not applicable at all, | ||||
|   -bugprone-easily-swappable-parameters, | ||||
|   -bugprone-implicit-widening-of-multiplication-result, | ||||
|   -bugprone-macro-parentheses, | ||||
|   -cppcoreguidelines-avoid-c-arrays, | ||||
|   -cppcoreguidelines-avoid-magic-numbers, | ||||
|   -cppcoreguidelines-avoid-non-const-global-variables, | ||||
|   -cppcoreguidelines-macro-usage, | ||||
|   -cppcoreguidelines-non-private-member-variables-in-classes, | ||||
|   -cppcoreguidelines-owning-memory, | ||||
|   -cppcoreguidelines-pro-bounds-array-to-pointer-decay, | ||||
|   -cppcoreguidelines-pro-bounds-constant-array-index, | ||||
|   -cppcoreguidelines-pro-bounds-pointer-arithmetic, | ||||
|   -cppcoreguidelines-pro-type-const-cast, | ||||
|   -cppcoreguidelines-pro-type-reinterpret-cast, | ||||
|   -cppcoreguidelines-pro-type-union-access, | ||||
|   -cppcoreguidelines-pro-type-vararg, | ||||
|   -cppcoreguidelines-special-member-functions, | ||||
|   -cppcoreguidelines-virtual-class-destructor, | ||||
|   -misc-no-recursion, | ||||
|   -misc-non-private-member-variables-in-classes, | ||||
|   -misc-unused-parameters, | ||||
|   -modernize-avoid-c-arrays, | ||||
|   -modernize-pass-by-value, | ||||
|   -modernize-use-auto, | ||||
|   -modernize-use-nodiscard, | ||||
|   -modernize-use-trailing-return-type, | ||||
|   -readability-function-cognitive-complexity, | ||||
|   -readability-function-size, | ||||
|   -readability-identifier-length, | ||||
|   -readability-implicit-bool-conversion, | ||||
|   -readability-isolate-declaration, | ||||
|   -readability-magic-numbers, | ||||
|   -readability-named-parameter, | ||||
|   -readability-redundant-access-specifiers, | ||||
|   -readability-simplify-boolean-expr, | ||||
|   -readability-uppercase-literal-suffix, | ||||
|   -# only sometimes useful, | ||||
|   -bugprone-narrowing-conversions, | ||||
|   -cert-dcl58-cpp, | ||||
|   -cert-err33-c, | ||||
|   -cert-err58-cpp, | ||||
|   -clang-analyzer-core.CallAndMessage, | ||||
|   -clang-analyzer-cplusplus.NewDelete, | ||||
|   -clang-analyzer-cplusplus.NewDeleteLeaks, | ||||
|   -concurrency-mt-unsafe, | ||||
|   -cppcoreguidelines-init-variables, | ||||
|   -cppcoreguidelines-narrowing-conversions, | ||||
|   -cppcoreguidelines-prefer-member-initializer, | ||||
|   -cppcoreguidelines-pro-type-static-cast-downcast, | ||||
|   -misc-definitions-in-headers, | ||||
|   -modernize-concat-nested-namespaces, | ||||
|   -modernize-loop-convert, | ||||
|   -modernize-raw-string-literal, | ||||
|   -modernize-unary-static-assert, | ||||
|   -performance-no-automatic-move, | ||||
|   -readability-convert-member-functions-to-static, | ||||
|   -readability-else-after-return, | ||||
|   -readability-redundant-declaration, | ||||
|   -# obsoleted, | ||||
|   -cert-dcl21-cpp | ||||
|  | ||||
| CheckOptions: | ||||
|   - { key: cppcoreguidelines-explicit-virtual-functions.IgnoreDestructors, value: true } | ||||
|   - { key: modernize-use-override.IgnoreDestructors, value: true } | ||||
|   - { key: performance-for-range-copy.AllowedTypes, value: "QJsonValue" } | ||||
|   - { key: performance-for-range-copy.WarnOnAllAutoCopies, value: true } | ||||
|   - { key: readability-braces-around-statements.ShortStatementLines, value: 3 } | ||||
|  | ||||
| HeaderFilterRegex: ".+/src/.*\\.h" | ||||
| WarningsAsErrors: "*" | ||||
| @@ -1,10 +1,8 @@ | ||||
| # EditorConfig is awesome: https://EditorConfig.org | ||||
| # EditorConfig is awesome: http://EditorConfig.org | ||||
|  | ||||
| root = true | ||||
|  | ||||
| [*] | ||||
| charset = utf-8 | ||||
| end_of_line = lf | ||||
| indent_style = space | ||||
| indent_size = 4 | ||||
| insert_final_newline = true | ||||
|   | ||||
							
								
								
									
										11
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										11
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
								
							| @@ -1,10 +1,7 @@ | ||||
| core.eol=lf | ||||
| * text eol=lf | ||||
| *.icns binary | ||||
| *.ico binary | ||||
| *.png binary | ||||
| *.qm binary | ||||
| *.zip binary | ||||
|  | ||||
| dist/windows/license.txt text eol=crlf | ||||
| test/testdata/crlf.txt text eol=crlf | ||||
| *.png binary | ||||
| *.ico binary | ||||
| *.qm binary | ||||
| *.icns binary | ||||
|   | ||||
							
								
								
									
										19
									
								
								.github/ISSUE_TEMPLATE.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								.github/ISSUE_TEMPLATE.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | ||||
| **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) | ||||
							
								
								
									
										74
									
								
								.github/ISSUE_TEMPLATE/bug_report.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										74
									
								
								.github/ISSUE_TEMPLATE/bug_report.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,74 +0,0 @@ | ||||
| name: Bug Report | ||||
| description: File a bug report to help improve qBittorrent user experience. | ||||
| body: | ||||
|   - type: markdown | ||||
|     attributes: | ||||
|       value: | | ||||
|         #### ADVISORY | ||||
|         "We do not support any versions older than the current release series" | ||||
|  | ||||
|         "We do not support any 3rd party/forked versions e.g. `portableapps`/`Enhanced Edition` etc." | ||||
|  | ||||
|         "Please post all details in **English**." | ||||
|  | ||||
|         #### Prerequisites before submitting an issue! | ||||
|         - Read the issue reporting section in the **[contributing guidelines](https://github.com/qbittorrent/qBittorrent/blob/master/CONTRIBUTING.md)**, to know how to submit a good bug report with the required information. | ||||
|         - Verify that the issue is not fixed and is reproducible in the **[latest official qBittorrent version](https://www.qbittorrent.org/download.php).** | ||||
|         - (Optional, but recommended) Verify that the issue is not fixed and is reproducible in the latest CI (**[macOS](https://github.com/qbittorrent/qBittorrent/actions/workflows/ci_macos.yaml?query=branch%3Amaster+event%3Apush)** / **[Ubuntu](https://github.com/qbittorrent/qBittorrent/actions/workflows/ci_ubuntu.yaml?query=branch%3Amaster+event%3Apush)** / **[Windows](https://github.com/qbittorrent/qBittorrent/actions/workflows/ci_windows.yaml?query=branch%3Amaster+event%3Apush)**) builds. | ||||
|         - Perform a **[search of the issue tracker (including closed ones)](https://github.com/qbittorrent/qBittorrent/issues?q=is%3Aissue+is%3Aopen+-label%3A%22Feature+request%22)** to avoid posting a duplicate. | ||||
|         - Make sure this is not a support request or question, both of which are better suited for either the **[discussions section](https://github.com/qbittorrent/qBittorrent/discussions)**, **[forum](https://qbforums.shiki.hu/)**, or **[subreddit](https://www.reddit.com/r/qBittorrent/)**. | ||||
|         - Verify that the **[wiki](https://github.com/qbittorrent/qBittorrent/wiki)** did not contain a suitable solution either. | ||||
|  | ||||
|   - type: textarea | ||||
|     attributes: | ||||
|       label: qBittorrent & operating system versions | ||||
|       description: | | ||||
|         Qt and libtorrent-rasterbar versions are required when: 1. You are using linux. 2. You are not using an official build downloaded from our website. | ||||
|  | ||||
|         Example of preferred formatting: | ||||
|         qBittorrent: 4.6.6 x64 | ||||
|         Operating system: Windows 10 Pro x64 (22H2) 10.0.19045 | ||||
|         Qt: 6.4.3 | ||||
|         libtorrent-rasterbar: 1.2.19 | ||||
|       placeholder: | | ||||
|         qBittorrent: | ||||
|         Operating system: | ||||
|         Qt: | ||||
|         libtorrent-rasterbar: | ||||
|     validations: | ||||
|       required: true | ||||
|  | ||||
|   - type: textarea | ||||
|     attributes: | ||||
|       label: What is the problem? | ||||
|       description: Please add the "crash report" (if encountered) or give a clear and concise description of problem. | ||||
|     validations: | ||||
|       required: true | ||||
|  | ||||
|   - type: textarea | ||||
|     attributes: | ||||
|       label: Steps to reproduce | ||||
|       description: Please provide reliable steps to reproduce the problem. | ||||
|       placeholder: | | ||||
|         1. First step | ||||
|         2. Second step | ||||
|         3. and so on... | ||||
|     validations: | ||||
|       required: false | ||||
|  | ||||
|   - type: textarea | ||||
|     attributes: | ||||
|       label: Additional context | ||||
|       description: Add screenshots etc. (Anything that will provide more context about the problem) | ||||
|     validations: | ||||
|       required: false | ||||
|  | ||||
|   - type: textarea | ||||
|     attributes: | ||||
|       label: Log(s) & preferences file(s) | ||||
|       description: | | ||||
|         Add these files: qBittorrent preferences file, qBittorrent.log & watched_folders.json (if using "Watched Folders" feature). | ||||
|         See **[Where does qBittorrent save its settings?](https://github.com/qbittorrent/qBittorrent/wiki/Frequently-Asked-Questions#Where_does_qBittorrent_save_its_settings)** | ||||
|         #### Note: It's the user's responsibility to redact any sensitive information | ||||
|     validations: | ||||
|       required: true | ||||
							
								
								
									
										17
									
								
								.github/ISSUE_TEMPLATE/config.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										17
									
								
								.github/ISSUE_TEMPLATE/config.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,17 +0,0 @@ | ||||
| blank_issues_enabled: false | ||||
| contact_links: | ||||
|   - name: Wiki | ||||
|     url: "https://github.com/qbittorrent/qBittorrent/wiki/" | ||||
|     about: "Consult the wiki first (especially the FAQ), it might already contain the information you are looking for" | ||||
|  | ||||
|   - name: Question | ||||
|     url: "https://github.com/qbittorrent/qBittorrent/discussions" | ||||
|     about: "Please ask questions related to usage/setup/support/non-issue development discussion in the Discussions section" | ||||
|  | ||||
|   - name: Question | ||||
|     url: "http://forum.qbittorrent.org/" | ||||
|     about: "Alternatively, ask on the official forum" | ||||
|  | ||||
|   - name: Question | ||||
|     url: "https://www.reddit.com/r/qBittorrent/" | ||||
|     about: "Alternatively, use the subreddit" | ||||
							
								
								
									
										37
									
								
								.github/ISSUE_TEMPLATE/feature_request.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										37
									
								
								.github/ISSUE_TEMPLATE/feature_request.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,37 +0,0 @@ | ||||
| name: Feature Request | ||||
| description: Suggest a new feature or enhancement for qBittorrent. | ||||
| labels: ["Feature request"] | ||||
| body: | ||||
|   - type: markdown | ||||
|     attributes: | ||||
|       value: | | ||||
|         #### ADVISORY | ||||
|  | ||||
|         "Please post all details in **English**." | ||||
|  | ||||
|         #### Prerequisites before submitting a feature request! | ||||
|         - Read the feature request section in the **[contributing guidelines](https://github.com/qbittorrent/qBittorrent/blob/master/CONTRIBUTING.md)**, to know how to submit a good feature request with the required information. | ||||
|         - Verify that the feature being requested is not available in the **[latest official qBittorrent version](https://www.qbittorrent.org/download.php).** | ||||
|         - (Optional but recommended) Verify that the feature being requested is not available in the latest CI (**[macOS](https://github.com/qbittorrent/qBittorrent/actions/workflows/ci_macos.yaml?query=branch%3Amaster+event%3Apush)** / **[Ubuntu](https://github.com/qbittorrent/qBittorrent/actions/workflows/ci_ubuntu.yaml?query=branch%3Amaster+event%3Apush)** / **[Windows](https://github.com/qbittorrent/qBittorrent/actions/workflows/ci_windows.yaml?query=branch%3Amaster+event%3Apush)**) builds. | ||||
|         - Search the issue tracker with the **[feature request filter](https://github.com/qbittorrent/qBittorrent/issues?q=is%3Aopen+is%3Aissue+label%3A%22Feature+request%22)** for similar feature requests (including closed ones) to avoid posting a duplicate. | ||||
|         - Make sure this is not a support request or question, both of which are better suited for either the **[discussions section](https://github.com/qbittorrent/qBittorrent/discussions)**, **[forum](https://qbforums.shiki.hu/)**, or **[subreddit](https://www.reddit.com/r/qBittorrent/)**. | ||||
|         - Verify that the **[wiki](https://github.com/qbittorrent/qBittorrent/wiki)** did not contain a suitable solution either. | ||||
|  | ||||
|   - type: textarea | ||||
|     attributes: | ||||
|       label: Suggestion | ||||
|     validations: | ||||
|       required: false | ||||
|  | ||||
|   - type: textarea | ||||
|     attributes: | ||||
|       label: Use case | ||||
|     validations: | ||||
|       required: false | ||||
|  | ||||
|   - type: textarea | ||||
|     attributes: | ||||
|       label: Extra info/examples/attachments | ||||
|       description: Add screenshots etc. (Anything that will give us more context about what is being requested!) | ||||
|     validations: | ||||
|       required: false | ||||
							
								
								
									
										5
									
								
								.github/PULL_REQUEST_TEMPLATE.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								.github/PULL_REQUEST_TEMPLATE.md
									
									
									
									
										vendored
									
									
								
							| @@ -1,5 +0,0 @@ | ||||
| <!-- | ||||
| MANDATORY Before submitting your work, make sure you have: | ||||
| 1. Read https://github.com/qbittorrent/qBittorrent/blob/master/CONTRIBUTING.md#opening-a-pull-request | ||||
| 2. Delete this comment block | ||||
| --> | ||||
							
								
								
									
										18
									
								
								.github/SUPPORT.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										18
									
								
								.github/SUPPORT.md
									
									
									
									
										vendored
									
									
								
							| @@ -1,18 +0,0 @@ | ||||
| # Support Resources | ||||
|  | ||||
| The issue tracker is only for bug reports/feature requests related to the project itself. | ||||
|  | ||||
| Please do not use the issue tracker for questions about general program usage, | ||||
| how BitTorrent (the protocol) works in general, etc. | ||||
|  | ||||
| For such questions, use one of the following community support resources: | ||||
|  | ||||
| * The [discussions section][discussions-url] | ||||
|  | ||||
| * The [official forum][forum-url] | ||||
|  | ||||
| * The [qBittorrent subreddit][subreddit-url] | ||||
|  | ||||
| [discussions-url]: https://github.com/qbittorrent/qBittorrent/discussions | ||||
| [forum-url]: http://forum.qbittorrent.org/ | ||||
| [subreddit-url]: https://www.reddit.com/r/qBittorrent/ | ||||
							
								
								
									
										15
									
								
								.github/dependabot.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										15
									
								
								.github/dependabot.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,15 +0,0 @@ | ||||
| version: 2 | ||||
|  | ||||
| updates: | ||||
|   - package-ecosystem: "github-actions" | ||||
|     directory: "/" | ||||
|     commit-message: | ||||
|       prefix: "GHA CI" | ||||
|     groups: | ||||
|       github-actions: | ||||
|         patterns: | ||||
|           - "*" | ||||
|     labels: | ||||
|       - "CI" | ||||
|     schedule: | ||||
|       interval: "monthly" | ||||
							
								
								
									
										63
									
								
								.github/workflows/ci_file_health.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										63
									
								
								.github/workflows/ci_file_health.yaml
									
									
									
									
										vendored
									
									
								
							| @@ -2,70 +2,19 @@ name: CI - File health | ||||
|  | ||||
| on: [pull_request, push] | ||||
|  | ||||
| permissions: {} | ||||
|  | ||||
| concurrency: | ||||
|   group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | ||||
|   cancel-in-progress: ${{ github.head_ref != '' }} | ||||
|  | ||||
| jobs: | ||||
|   ci: | ||||
|     name: Check | ||||
|     runs-on: ubuntu-latest | ||||
|     permissions: | ||||
|       security-events: write | ||||
|     steps: | ||||
|       - name: Checkout repository | ||||
|         uses: actions/checkout@v4 | ||||
|         with: | ||||
|           persist-credentials: false | ||||
|         uses: actions/checkout@v2 | ||||
|  | ||||
|       - name: Setup python | ||||
|         uses: actions/setup-python@v5 | ||||
|         with: | ||||
|           python-version: "*" | ||||
|       - name: Install tools | ||||
|         run: | | ||||
|           sudo apt update | ||||
|           sudo apt install zsh | ||||
|  | ||||
|       - name: Check files | ||||
|         uses: pre-commit/action@v3.0.1 | ||||
|  | ||||
|       - name: Check doc | ||||
|         env: | ||||
|           pandoc_path: "${{ github.workspace }}/../pandoc" | ||||
|         run: | | ||||
|           # install pandoc | ||||
|           curl \ | ||||
|             -L \ | ||||
|             -o "${{ runner.temp }}/pandoc.tar.gz" \ | ||||
|             "https://github.com/jgm/pandoc/releases/download/3.6/pandoc-3.6-linux-amd64.tar.gz" | ||||
|           tar -xf "${{ runner.temp }}/pandoc.tar.gz" -C "${{ github.workspace }}/.." | ||||
|           mv "${{ github.workspace }}/.."/pandoc-* "${{ env.pandoc_path }}" | ||||
|           # run pandoc | ||||
|           for lang in doc/*/; do | ||||
|             "${{ env.pandoc_path }}/bin/pandoc" -f markdown -t man -s "$lang/qbittorrent.1.md" -o "$lang/qbittorrent.1" | ||||
|             "${{ env.pandoc_path }}/bin/pandoc" -f markdown -t man -s "$lang/qbittorrent-nox.1.md" -o "$lang/qbittorrent-nox.1" | ||||
|           done | ||||
|           # check diff, ignore "Automatically generated by ..." part | ||||
|           git diff -I '\.\\".*' --exit-code | ||||
|  | ||||
|       - name: Check GitHub Actions workflow | ||||
|         env: | ||||
|           GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||||
|         run: | | ||||
|           pip install zizmor | ||||
|           IGNORE_RULEID='(.ruleId != "template-injection") | ||||
|             and (.ruleId != "unpinned-uses")' | ||||
|           IGNORE_ID='(.id != "template-injection") | ||||
|             and (.id != "unpinned-uses")' | ||||
|           zizmor \ | ||||
|             --format sarif \ | ||||
|             --pedantic \ | ||||
|             ./ \ | ||||
|             | jq "(.runs[].results |= map(select($IGNORE_RULEID))) | ||||
|               | (.runs[].tool.driver.rules |= map(select($IGNORE_ID)))" \ | ||||
|             > "${{ runner.temp }}/zizmor_results.sarif" | ||||
|  | ||||
|       - name: Upload zizmor results | ||||
|         uses: github/codeql-action/upload-sarif@v3 | ||||
|         with: | ||||
|           category: zizmor | ||||
|           sarif_file: "${{ runner.temp }}/zizmor_results.sarif" | ||||
|           ./.github/workflows/file_health.sh | ||||
|   | ||||
							
								
								
									
										143
									
								
								.github/workflows/ci_macos.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										143
									
								
								.github/workflows/ci_macos.yaml
									
									
									
									
										vendored
									
									
								
							| @@ -1,152 +1,73 @@ | ||||
| name: CI - macOS | ||||
|  | ||||
| on: [pull_request, push] | ||||
|  | ||||
| permissions: {} | ||||
|  | ||||
| concurrency: | ||||
|   group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | ||||
|   cancel-in-progress: ${{ github.head_ref != '' }} | ||||
|  | ||||
| jobs: | ||||
|   ci: | ||||
|     name: Build | ||||
|     runs-on: macos-latest | ||||
|     permissions: | ||||
|       actions: write | ||||
|     runs-on: macos-10.15 | ||||
|  | ||||
|     strategy: | ||||
|       fail-fast: false | ||||
|       matrix: | ||||
|         libt_version: ["2.0.11", "1.2.20"] | ||||
|         libt_version: ["v1.2.12"] | ||||
|         qbt_gui: ["GUI=ON", "GUI=OFF"] | ||||
|         qt_version: ["6.7.0"] | ||||
|       fail-fast: false | ||||
|  | ||||
|     env: | ||||
|       boost_path: "${{ github.workspace }}/../boost" | ||||
|       libtorrent_path: "${{ github.workspace }}/../libtorrent" | ||||
|       openssl_root: /usr/local/opt/openssl@1.1 | ||||
|  | ||||
|     steps: | ||||
|       - name: Checkout repository | ||||
|         uses: actions/checkout@v4 | ||||
|         with: | ||||
|           persist-credentials: false | ||||
|  | ||||
|       - name: Install dependencies | ||||
|         uses: Wandalen/wretry.action@v3 | ||||
|         env: | ||||
|            HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK: 1 | ||||
|            HOMEBREW_NO_INSTALL_CLEANUP: 1 | ||||
|         with: | ||||
|           attempt_delay: 20000 | ||||
|           attempt_limit: 6 | ||||
|           command: | | ||||
|             brew update > /dev/null | ||||
|             brew install \ | ||||
|               cmake ninja \ | ||||
|               openssl@3 zlib | ||||
|         uses: actions/checkout@v2 | ||||
|  | ||||
|       - name: Setup ccache | ||||
|         uses: Chocobo1/setup-ccache-action@v1 | ||||
|         uses: hendrikmuhs/ccache-action@v1 | ||||
|         with: | ||||
|           store_cache: ${{ github.ref == 'refs/heads/master' }} | ||||
|           update_packager_index: false | ||||
|           ccache_options: | | ||||
|             max_size=2G | ||||
|           key: ${{ runner.os }} | ||||
|  | ||||
|       - name: Install boost | ||||
|         env: | ||||
|           BOOST_MAJOR_VERSION: "1" | ||||
|           BOOST_MINOR_VERSION: "86" | ||||
|           BOOST_PATCH_VERSION: "0" | ||||
|       - name: Install dependencies | ||||
|         run: | | ||||
|           boost_url="https://archives.boost.io/release/${{ env.BOOST_MAJOR_VERSION }}.${{ env.BOOST_MINOR_VERSION }}.${{ env.BOOST_PATCH_VERSION }}/source/boost_${{ env.BOOST_MAJOR_VERSION }}_${{ env.BOOST_MINOR_VERSION }}_${{ env.BOOST_PATCH_VERSION }}.tar.gz" | ||||
|           boost_url2="https://sourceforge.net/projects/boost/files/boost/${{ env.BOOST_MAJOR_VERSION }}.${{ env.BOOST_MINOR_VERSION }}.${{ env.BOOST_PATCH_VERSION }}/boost_${{ env.BOOST_MAJOR_VERSION }}_${{ env.BOOST_MINOR_VERSION }}_${{ env.BOOST_PATCH_VERSION }}.tar.gz" | ||||
|           set +e | ||||
|           curl -L -o "${{ runner.temp }}/boost.tar.gz" "$boost_url" | ||||
|           tar -xf "${{ runner.temp }}/boost.tar.gz" -C "${{ github.workspace }}/.."; _exitCode="$?" | ||||
|           if [ "$_exitCode" -ne "0" ]; then | ||||
|             curl -L -o "${{ runner.temp }}/boost.tar.gz" "$boost_url2" | ||||
|             tar -xf "${{ runner.temp }}/boost.tar.gz" -C "${{ github.workspace }}/.."; _exitCode="$?" | ||||
|           fi | ||||
|           mv "${{ github.workspace }}/.."/boost_* "${{ env.boost_path }}" | ||||
|  | ||||
|       - name: Install Qt | ||||
|         uses: jurplel/install-qt-action@v4 | ||||
|         with: | ||||
|           version: ${{ matrix.qt_version }} | ||||
|           archives: qtbase qtdeclarative qtsvg qttools | ||||
|           # Not sure why Qt made a hard dependency on qtdeclarative, try removing it when Qt > 6.4.0 | ||||
|           cache: true | ||||
|           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 v${{ matrix.libt_version }} \ | ||||
|             --depth 1 \ | ||||
|             --recurse-submodules \ | ||||
|             https://github.com/arvidn/libtorrent.git \ | ||||
|             ${{ env.libtorrent_path }} | ||||
|           cd ${{ env.libtorrent_path }} | ||||
|           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" \ | ||||
|             -DBUILD_SHARED_LIBS=OFF \ | ||||
|             -DCMAKE_BUILD_TYPE=RelWithDebInfo \ | ||||
|             -DCMAKE_CXX_STANDARD=20 \ | ||||
|             -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \ | ||||
|             -DBOOST_ROOT="${{ env.boost_path }}" \ | ||||
|             -Ddeprecated-functions=OFF | ||||
|             -DCMAKE_CXX_STANDARD=17 \ | ||||
|             -Ddeprecated-functions=OFF \ | ||||
|             -DOPENSSL_ROOT_DIR="${{ env.openssl_root }}" | ||||
|           cmake --build build | ||||
|           sudo cmake --install build | ||||
|  | ||||
|       - name: Build qBittorrent | ||||
|         run: | | ||||
|           CXXFLAGS="$CXXFLAGS -DQT_FORCE_ASSERTS -Werror -Wno-error=deprecated-declarations" \ | ||||
|           LDFLAGS="$LDFLAGS -gz" \ | ||||
|           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 \ | ||||
|             -DBOOST_ROOT="${{ env.boost_path }}" \ | ||||
|             -DTESTING=ON \ | ||||
|             -D${{ matrix.qbt_gui }} \ | ||||
|             -DVERBOSE_CONFIGURE=ON \ | ||||
|             -D${{ matrix.qbt_gui }} | ||||
|           cmake --build build --target qbt_update_translations | ||||
|             -DOPENSSL_ROOT_DIR="${{ env.openssl_root }}" | ||||
|           cmake --build build | ||||
|           cmake --build build --target check | ||||
|  | ||||
|       - name: Prepare build artifacts | ||||
|         run: | | ||||
|           # create .dmg | ||||
|           appName="qbittorrent" | ||||
|           if [ "${{ matrix.qbt_gui }}" = "GUI=OFF" ]; then | ||||
|             appName="qbittorrent-nox" | ||||
|           fi | ||||
|           # package | ||||
|           pushd build | ||||
|           PACKAGE_RETRY=0 | ||||
|           while [ "$PACKAGE_RETRY" -lt "3" ]; do | ||||
|             macdeployqt "$appName.app" -dmg -no-strip | ||||
|             if [ -f "$appName.dmg" ]; then | ||||
|               break | ||||
|             fi | ||||
|             sleep 5 | ||||
|             PACKAGE_RETRY=$((PACKAGE_RETRY + 1)) | ||||
|             echo "Retry $PACKAGE_RETRY..." | ||||
|           done | ||||
|           popd | ||||
|           # prepare upload folder | ||||
|           mkdir upload | ||||
|           cp "build/$appName.dmg" upload | ||||
|           mkdir upload/cmake | ||||
|           cp build/compile_commands.json upload/cmake | ||||
|           mkdir upload/cmake/libtorrent | ||||
|           cp ${{ env.libtorrent_path }}/build/compile_commands.json upload/cmake/libtorrent | ||||
|  | ||||
|       - name: Upload build artifacts | ||||
|         uses: actions/upload-artifact@v4 | ||||
|         uses: actions/upload-artifact@v2 | ||||
|         with: | ||||
|           name: qBittorrent-CI_macOS_${{ matrix.qbt_gui }}_libtorrent-${{ matrix.libt_version }}_Qt-${{ matrix.qt_version }} | ||||
|           path: upload | ||||
|           name: qBittorrent-CI_macOS_${{ matrix.qbt_gui }}_libtorrent-${{ matrix.libt_version }} | ||||
|           path: | | ||||
|             build/qbittorrent.app | ||||
|             build/qbittorrent-nox.app | ||||
|   | ||||
							
								
								
									
										91
									
								
								.github/workflows/ci_python.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										91
									
								
								.github/workflows/ci_python.yaml
									
									
									
									
										vendored
									
									
								
							| @@ -1,91 +0,0 @@ | ||||
| name: CI - Python | ||||
|  | ||||
| on: [pull_request, push] | ||||
|  | ||||
| permissions: {} | ||||
|  | ||||
| concurrency: | ||||
|   group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | ||||
|   cancel-in-progress: ${{ github.head_ref != '' }} | ||||
|  | ||||
| jobs: | ||||
|   ci: | ||||
|     name: Check | ||||
|     runs-on: ubuntu-latest | ||||
|  | ||||
|     steps: | ||||
|       - name: Checkout repository | ||||
|         uses: actions/checkout@v4 | ||||
|         with: | ||||
|           persist-credentials: false | ||||
|  | ||||
|       - name: Setup python (auxiliary scripts) | ||||
|         uses: actions/setup-python@v5 | ||||
|         with: | ||||
|           python-version: '3'  # use default version | ||||
|  | ||||
|       - name: Install tools (auxiliary scripts) | ||||
|         run: pip install bandit pycodestyle pyflakes | ||||
|  | ||||
|       - name: Gather files (auxiliary scripts) | ||||
|         run: | | ||||
|           export "PY_FILES=$(find . -type f -name '*.py' ! -path '*searchengine*' -printf '%p ')" | ||||
|           echo $PY_FILES | ||||
|           echo "PY_FILES=$PY_FILES" >> "$GITHUB_ENV" | ||||
|  | ||||
|       - name: Lint code (auxiliary scripts) | ||||
|         run: | | ||||
|           pyflakes $PY_FILES | ||||
|           bandit --skip B101,B314,B405 $PY_FILES | ||||
|  | ||||
|       - name: Format code (auxiliary scripts) | ||||
|         run: | | ||||
|           pycodestyle \ | ||||
|             --max-line-length=1000 \ | ||||
|             --statistics \ | ||||
|             $PY_FILES | ||||
|  | ||||
|       - name: Build code (auxiliary scripts) | ||||
|         run: | | ||||
|           python -m compileall $PY_FILES | ||||
|  | ||||
|       - name: Setup python (search engine) | ||||
|         uses: actions/setup-python@v5 | ||||
|         with: | ||||
|           python-version: '3.9' | ||||
|  | ||||
|       - name: Install tools (search engine) | ||||
|         run: pip install bandit mypy pycodestyle pyflakes pyright | ||||
|  | ||||
|       - name: Gather files (search engine) | ||||
|         run: | | ||||
|           export "PY_FILES=$(find . -type f -name '*.py' -path '*searchengine*' ! -name 'socks.py' -printf '%p ')" | ||||
|           echo $PY_FILES | ||||
|           echo "PY_FILES=$PY_FILES" >> "$GITHUB_ENV" | ||||
|  | ||||
|       - name: Check typings (search engine) | ||||
|         run: | | ||||
|           MYPYPATH="src/searchengine/nova3" \ | ||||
|           mypy \ | ||||
|             --follow-imports skip \ | ||||
|             --strict \ | ||||
|             $PY_FILES | ||||
|           pyright \ | ||||
|             $PY_FILES | ||||
|  | ||||
|       - name: Lint code (search engine) | ||||
|         run: | | ||||
|           pyflakes $PY_FILES | ||||
|           bandit --skip B110,B310,B314,B405 $PY_FILES | ||||
|  | ||||
|       - name: Format code (search engine) | ||||
|         run: | | ||||
|           pycodestyle \ | ||||
|             --ignore=E265,E402 \ | ||||
|             --max-line-length=1000 \ | ||||
|             --statistics \ | ||||
|             $PY_FILES | ||||
|  | ||||
|       - name: Build code (search engine) | ||||
|         run: | | ||||
|           python -m compileall $PY_FILES | ||||
							
								
								
									
										167
									
								
								.github/workflows/ci_ubuntu.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										167
									
								
								.github/workflows/ci_ubuntu.yaml
									
									
									
									
										vendored
									
									
								
							| @@ -1,173 +1,84 @@ | ||||
| name: CI - Ubuntu | ||||
|  | ||||
| on: [pull_request, push] | ||||
|  | ||||
| permissions: {} | ||||
|  | ||||
| concurrency: | ||||
|   group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | ||||
|   cancel-in-progress: ${{ github.head_ref != '' }} | ||||
|  | ||||
| jobs: | ||||
|   ci: | ||||
|     name: Build | ||||
|     runs-on: ubuntu-latest | ||||
|     permissions: | ||||
|       actions: write | ||||
|       security-events: write | ||||
|     runs-on: ubuntu-20.04 | ||||
|  | ||||
|     strategy: | ||||
|       fail-fast: false | ||||
|       matrix: | ||||
|         libt_version: ["2.0.11", "1.2.20"] | ||||
|         libt_version: ["v1.2.12"] | ||||
|         qbt_gui: ["GUI=ON", "GUI=OFF"] | ||||
|         qt_version: ["6.5.2"] | ||||
|  | ||||
|     env: | ||||
|       boost_path: "${{ github.workspace }}/../boost" | ||||
|       harden_flags: "-D_FORTIFY_SOURCE=3 -D_GLIBCXX_ASSERTIONS" | ||||
|       libtorrent_path: "${{ github.workspace }}/../libtorrent" | ||||
|       fail-fast: false | ||||
|  | ||||
|     steps: | ||||
|       - name: Checkout repository | ||||
|         uses: actions/checkout@v4 | ||||
|         uses: actions/checkout@v2 | ||||
|  | ||||
|       - name: Setup ccache | ||||
|         uses: hendrikmuhs/ccache-action@v1 | ||||
|         with: | ||||
|           persist-credentials: false | ||||
|           key: ${{ runner.os }} | ||||
|  | ||||
|       - name: Install dependencies | ||||
|         run: | | ||||
|           sudo apt update | ||||
|           sudo apt install \ | ||||
|             build-essential cmake ninja-build \ | ||||
|             libssl-dev libxkbcommon-x11-dev libxcb-cursor-dev zlib1g-dev | ||||
|  | ||||
|       - name: Setup ccache | ||||
|         uses: Chocobo1/setup-ccache-action@v1 | ||||
|         with: | ||||
|           store_cache: ${{ github.ref == 'refs/heads/master' }} | ||||
|           update_packager_index: false | ||||
|           ccache_options: | | ||||
|             max_size=2G | ||||
|  | ||||
|       - name: Install boost | ||||
|         env: | ||||
|           BOOST_MAJOR_VERSION: "1" | ||||
|           BOOST_MINOR_VERSION: "77" | ||||
|           BOOST_PATCH_VERSION: "0" | ||||
|         run: | | ||||
|           boost_url="https://archives.boost.io/release/${{ env.BOOST_MAJOR_VERSION }}.${{ env.BOOST_MINOR_VERSION }}.${{ env.BOOST_PATCH_VERSION }}/source/boost_${{ env.BOOST_MAJOR_VERSION }}_${{ env.BOOST_MINOR_VERSION }}_${{ env.BOOST_PATCH_VERSION }}.tar.gz" | ||||
|           boost_url2="https://sourceforge.net/projects/boost/files/boost/${{ env.BOOST_MAJOR_VERSION }}.${{ env.BOOST_MINOR_VERSION }}.${{ env.BOOST_PATCH_VERSION }}/boost_${{ env.BOOST_MAJOR_VERSION }}_${{ env.BOOST_MINOR_VERSION }}_${{ env.BOOST_PATCH_VERSION }}.tar.gz" | ||||
|           set +e | ||||
|           curl -L -o "${{ runner.temp }}/boost.tar.gz" "$boost_url" | ||||
|           tar -xf "${{ runner.temp }}/boost.tar.gz" -C "${{ github.workspace }}/.."; _exitCode="$?" | ||||
|           if [ "$_exitCode" -ne "0" ]; then | ||||
|             curl -L -o "${{ runner.temp }}/boost.tar.gz" "$boost_url2" | ||||
|             tar -xf "${{ runner.temp }}/boost.tar.gz" -C "${{ github.workspace }}/.."; _exitCode="$?" | ||||
|           fi | ||||
|           mv "${{ github.workspace }}/.."/boost_* "${{ env.boost_path }}" | ||||
|             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 | ||||
|         uses: jurplel/install-qt-action@v4 | ||||
|         with: | ||||
|           version: ${{ matrix.qt_version }} | ||||
|           archives: icu qtbase qtdeclarative qtsvg qttools | ||||
|           cache: true | ||||
|         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 v${{ matrix.libt_version }} \ | ||||
|             --depth 1 \ | ||||
|             --recurse-submodules \ | ||||
|             https://github.com/arvidn/libtorrent.git \ | ||||
|             ${{ env.libtorrent_path }} | ||||
|           cd ${{ env.libtorrent_path }} | ||||
|           CXXFLAGS="$CXXFLAGS ${{ env.harden_flags }}" \ | ||||
|           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" \ | ||||
|             -DBUILD_SHARED_LIBS=OFF \ | ||||
|             -DCMAKE_BUILD_TYPE=RelWithDebInfo \ | ||||
|             -DCMAKE_CXX_STANDARD=20 \ | ||||
|             -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \ | ||||
|             -DBOOST_ROOT="${{ env.boost_path }}" \ | ||||
|             -Ddeprecated-functions=OFF | ||||
|             -Ddeprecated-functions=OFF \ | ||||
|             --graphviz=cmake-build-dir/target_graph.dot | ||||
|           cmake --build build | ||||
|           sudo cmake --install build | ||||
|  | ||||
|       # to avoid scanning 3rdparty codebases, initialize it just before building qbt | ||||
|       - name: Initialize CodeQL | ||||
|         uses: github/codeql-action/init@v3 | ||||
|         if: startsWith(matrix.libt_version, 2) && (matrix.qbt_gui == 'GUI=ON') | ||||
|         with: | ||||
|           config-file: ./.github/workflows/helper/codeql/cpp.yaml | ||||
|           languages: cpp | ||||
|  | ||||
|       - name: Build qBittorrent | ||||
|         run: | | ||||
|           CXXFLAGS="$CXXFLAGS ${{ env.harden_flags }} -DQT_FORCE_ASSERTS -Werror" \ | ||||
|           LDFLAGS="$LDFLAGS -gz" \ | ||||
|           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 \ | ||||
|             -DBOOST_ROOT="${{ env.boost_path }}" \ | ||||
|             -DCMAKE_INSTALL_PREFIX="/usr" \ | ||||
|             -DTESTING=ON \ | ||||
|             -D${{ matrix.qbt_gui }} \ | ||||
|             -DVERBOSE_CONFIGURE=ON \ | ||||
|             -D${{ matrix.qbt_gui }} | ||||
|           cmake --build build --target qbt_update_translations | ||||
|             --graphviz=build/target_graph.dot | ||||
|           cmake --build build | ||||
|           cmake --build build --target check | ||||
|           DESTDIR="qbittorrent" cmake --install build | ||||
|  | ||||
|       - name: Run CodeQL analysis | ||||
|         uses: github/codeql-action/analyze@v3 | ||||
|         if: startsWith(matrix.libt_version, 2) && (matrix.qbt_gui == 'GUI=ON') | ||||
|         with: | ||||
|           category: ${{ github.base_ref || github.ref_name }} | ||||
|  | ||||
|       - name: Prepare build artifacts | ||||
|         run: | | ||||
|           mkdir upload | ||||
|           mkdir upload/cmake | ||||
|           cp build/compile_commands.json upload/cmake | ||||
|           mkdir upload/cmake/libtorrent | ||||
|           cp ${{ env.libtorrent_path }}/build/compile_commands.json upload/cmake/libtorrent | ||||
|  | ||||
|       - name: Install AppImage | ||||
|         run: | | ||||
|           curl \ | ||||
|             -L \ | ||||
|             -Z \ | ||||
|             -O https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage \ | ||||
|             -O https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage \ | ||||
|             -O https://github.com/linuxdeploy/linuxdeploy-plugin-appimage/releases/download/continuous/linuxdeploy-plugin-appimage-x86_64.AppImage | ||||
|           chmod +x \ | ||||
|             linuxdeploy-x86_64.AppImage \ | ||||
|             linuxdeploy-plugin-qt-x86_64.AppImage \ | ||||
|             linuxdeploy-plugin-appimage-x86_64.AppImage | ||||
|  | ||||
|       - name: Prepare files for AppImage | ||||
|         if: matrix.qbt_gui == 'GUI=OFF' | ||||
|         run: | | ||||
|           mkdir -p qbittorrent/usr/share/applications | ||||
|           cp .github/workflows/helper/appimage/org.qbittorrent.qBittorrent.desktop qbittorrent/usr/share/applications/org.qbittorrent.qBittorrent.desktop | ||||
|           mkdir -p qbittorrent/usr/share/icons/hicolor/scalable/apps | ||||
|           cp dist/unix/menuicons/scalable/apps/qbittorrent.svg qbittorrent/usr/share/icons/hicolor/scalable/apps/qbittorrent.svg | ||||
|  | ||||
|       - name: Package AppImage | ||||
|         run: | | ||||
|           ./linuxdeploy-x86_64.AppImage --appdir qbittorrent --plugin qt | ||||
|           rm qbittorrent/apprun-hooks/* | ||||
|           cp .github/workflows/helper/appimage/export_vars.sh qbittorrent/apprun-hooks/export_vars.sh | ||||
|           NO_APPSTREAM=1 \ | ||||
|             OUTPUT=upload/qbittorrent-CI_Ubuntu_x86_64.AppImage \ | ||||
|             ./linuxdeploy-x86_64.AppImage --appdir qbittorrent --output appimage | ||||
|       - name: Install qBittorrent | ||||
|         run: sudo cmake --install build | ||||
|  | ||||
|       - name: Upload build artifacts | ||||
|         uses: actions/upload-artifact@v4 | ||||
|         uses: actions/upload-artifact@v2 | ||||
|         with: | ||||
|           name: qBittorrent-CI_Ubuntu-x64_${{ matrix.qbt_gui }}_libtorrent-${{ matrix.libt_version }}_Qt-${{ matrix.qt_version }} | ||||
|           path: upload | ||||
|           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 | ||||
|   | ||||
							
								
								
									
										28
									
								
								.github/workflows/ci_webui.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										28
									
								
								.github/workflows/ci_webui.yaml
									
									
									
									
										vendored
									
									
								
							| @@ -2,18 +2,10 @@ name: CI - WebUI | ||||
|  | ||||
| on: [pull_request, push] | ||||
|  | ||||
| permissions: {} | ||||
|  | ||||
| concurrency: | ||||
|   group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | ||||
|   cancel-in-progress: ${{ github.head_ref != '' }} | ||||
|  | ||||
| jobs: | ||||
|   ci: | ||||
|     name: Check | ||||
|     runs-on: ubuntu-latest | ||||
|     permissions: | ||||
|       security-events: write | ||||
|  | ||||
|     defaults: | ||||
|       run: | ||||
| @@ -21,20 +13,15 @@ jobs: | ||||
|  | ||||
|     steps: | ||||
|       - name: Checkout repository | ||||
|         uses: actions/checkout@v4 | ||||
|         with: | ||||
|           persist-credentials: false | ||||
|         uses: actions/checkout@v2 | ||||
|  | ||||
|       - name: Setup nodejs | ||||
|         uses: actions/setup-node@v4 | ||||
|         uses: actions/setup-node@v2 | ||||
|         with: | ||||
|           node-version: 'lts/*' | ||||
|  | ||||
|       - name: Install tools | ||||
|         run: | | ||||
|           npm install | ||||
|           npm ls | ||||
|           npm ls --all | ||||
|         run: npm install | ||||
|  | ||||
|       - name: Lint code | ||||
|         run: npm run lint | ||||
| @@ -43,12 +30,3 @@ jobs: | ||||
|         run: | | ||||
|           npm run format | ||||
|           git diff --exit-code | ||||
|  | ||||
|       - name: Initialize CodeQL | ||||
|         uses: github/codeql-action/init@v3 | ||||
|         with: | ||||
|           config-file: .github/workflows/helper/codeql/js.yaml | ||||
|           languages: javascript | ||||
|  | ||||
|       - name: Run CodeQL analysis | ||||
|         uses: github/codeql-action/analyze@v3 | ||||
|   | ||||
							
								
								
									
										216
									
								
								.github/workflows/ci_windows.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										216
									
								
								.github/workflows/ci_windows.yaml
									
									
									
									
										vendored
									
									
								
							| @@ -1,203 +1,85 @@ | ||||
| name: CI - Windows | ||||
|  | ||||
| on: [pull_request, push] | ||||
|  | ||||
| permissions: {} | ||||
|  | ||||
| concurrency: | ||||
|   group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | ||||
|   cancel-in-progress: ${{ github.head_ref != '' }} | ||||
|  | ||||
| jobs: | ||||
|   ci: | ||||
|     name: Build | ||||
|     runs-on: windows-latest | ||||
|     permissions: | ||||
|       actions: write | ||||
|  | ||||
|     strategy: | ||||
|       fail-fast: false | ||||
|       matrix: | ||||
|         libt_version: ["2.0.11", "1.2.20"] | ||||
|  | ||||
|     env: | ||||
|       boost_path: "${{ github.workspace }}/../boost" | ||||
|       libtorrent_path: "${{ github.workspace }}/../libtorrent" | ||||
|       vcpkg_path: "c:/vcpkg" | ||||
|     runs-on: windows-2019 | ||||
|  | ||||
|     steps: | ||||
|       - name: Checkout repository | ||||
|         uses: actions/checkout@v4 | ||||
|         with: | ||||
|           persist-credentials: false | ||||
|  | ||||
|       - name: Setup devcmd | ||||
|         uses: ilammy/msvc-dev-cmd@v1 | ||||
|         uses: actions/checkout@v2 | ||||
|  | ||||
|       - name: Install build tools | ||||
|         run: | | ||||
|           if ((Get-Command "ninja.exe" -ErrorAction SilentlyContinue) -eq $null) | ||||
|           { | ||||
|              choco install ninja | ||||
|           } | ||||
|           where.exe ninja | ||||
|           ninja --version | ||||
|           choco install ninja | ||||
|  | ||||
|       # https://learn.microsoft.com/en-us/vcpkg/users/binarycaching#gha | ||||
|       - name: Set variables for vcpkg | ||||
|         uses: actions/github-script@v7 | ||||
|       # 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: | ||||
|           script: | | ||||
|             core.exportVariable('ACTIONS_CACHE_URL', (process.env.ACTIONS_CACHE_URL || '')); | ||||
|             core.exportVariable('ACTIONS_RUNTIME_TOKEN', (process.env.ACTIONS_RUNTIME_TOKEN || '')); | ||||
|           vcpkgDirectory: C:/vcpkg | ||||
|           doNotUpdateVcpkg: true  # the preinstalled vcpkg is updated regularly | ||||
|           setupOnly: true | ||||
|  | ||||
|       - name: Install dependencies with vcpkg | ||||
|       # tell vcpkg to only build Release variants of the dependencies | ||||
|       - name: Configure vcpkg triplet overlay | ||||
|         run: | | ||||
|           # create our own triplet | ||||
|           New-Item ` | ||||
|             -Force ` | ||||
|             -ItemType File ` | ||||
|             -Path "${{ env.vcpkg_path }}/triplets_overlay/x64-windows-static-md-release.cmake" | ||||
|           # OpenSSL isn't compatible with `/guard:cf` flag so we omit it for now, see: https://github.com/openssl/openssl/issues/22554 | ||||
|             -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 ` | ||||
|             -Path "${{ env.vcpkg_path }}/triplets_overlay/x64-windows-static-md-release.cmake" ` | ||||
|             -Value @("set(VCPKG_TARGET_ARCHITECTURE x64)", | ||||
|               "set(VCPKG_LIBRARY_LINKAGE static)", | ||||
|               "set(VCPKG_CRT_LINKAGE dynamic)", | ||||
|               "set(VCPKG_BUILD_TYPE release)") | ||||
|           # clear buildtrees after each package installation to reduce disk space requirements | ||||
|             "${{ 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 = ` | ||||
|             "openssl:x64-windows-static-md-release", | ||||
|             "zlib:x64-windows-static-md-release" | ||||
|           ${{ env.vcpkg_path }}/vcpkg.exe upgrade ` | ||||
|             --no-dry-run ` | ||||
|             --overlay-triplets="${{ env.vcpkg_path }}/triplets_overlay" | ||||
|           ${{ env.vcpkg_path }}/vcpkg.exe install ` | ||||
|             --binarysource="clear;x-gha,readwrite" ` | ||||
|             "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 ` | ||||
|             --overlay-triplets="${{ env.vcpkg_path }}/triplets_overlay" ` | ||||
|             $packages | ||||
|  | ||||
|       - name: Install boost | ||||
|         env: | ||||
|           BOOST_MAJOR_VERSION: "1" | ||||
|           BOOST_MINOR_VERSION: "86" | ||||
|           BOOST_PATCH_VERSION: "0" | ||||
|         run: | | ||||
|           $boost_url="https://archives.boost.io/release/${{ env.BOOST_MAJOR_VERSION }}.${{ env.BOOST_MINOR_VERSION }}.${{ env.BOOST_PATCH_VERSION }}/source/boost_${{ env.BOOST_MAJOR_VERSION }}_${{ env.BOOST_MINOR_VERSION }}_${{ env.BOOST_PATCH_VERSION }}.tar.gz" | ||||
|           $boost_url2="https://sourceforge.net/projects/boost/files/boost/${{ env.BOOST_MAJOR_VERSION }}.${{ env.BOOST_MINOR_VERSION }}.${{ env.BOOST_PATCH_VERSION }}/boost_${{ env.BOOST_MAJOR_VERSION }}_${{ env.BOOST_MINOR_VERSION }}_${{ env.BOOST_PATCH_VERSION }}.tar.gz" | ||||
|           curl -L -o "${{ runner.temp }}/boost.tar.gz" "$boost_url" | ||||
|           tar -xf "${{ runner.temp }}/boost.tar.gz" -C "${{ github.workspace }}/.." | ||||
|           if ($LastExitCode -ne 0) | ||||
|           { | ||||
|             curl -L -o "${{ runner.temp }}/boost.tar.gz" "$boost_url2" | ||||
|             tar -xf "${{ runner.temp }}/boost.tar.gz" -C "${{ github.workspace }}/.." | ||||
|           } | ||||
|           move "${{ github.workspace }}/../boost_*" "${{ env.boost_path }}" | ||||
|  | ||||
|       - name: Install Qt | ||||
|         uses: jurplel/install-qt-action@v4 | ||||
|         with: | ||||
|           version: "6.8.0" | ||||
|           arch: win64_msvc2022_64 | ||||
|           archives: qtbase qtsvg qttools | ||||
|           cache: true | ||||
|  | ||||
|       - name: Install libtorrent | ||||
|         run: | | ||||
|           git clone ` | ||||
|             --branch v${{ matrix.libt_version }} ` | ||||
|             --depth 1 ` | ||||
|             --recurse-submodules ` | ||||
|             https://github.com/arvidn/libtorrent.git ` | ||||
|             ${{ env.libtorrent_path }} | ||||
|           cd ${{ env.libtorrent_path }} | ||||
|           $env:CXXFLAGS+=" /guard:cf" | ||||
|           $env:LDFLAGS+=" /guard:cf" | ||||
|           cmake ` | ||||
|             -B build ` | ||||
|             -G "Ninja" ` | ||||
|             -DCMAKE_BUILD_TYPE=RelWithDebInfo ` | ||||
|             -DCMAKE_CXX_STANDARD=20 ` | ||||
|             -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ` | ||||
|             -DCMAKE_INSTALL_PREFIX="${{ env.libtorrent_path }}/install" ` | ||||
|             -DCMAKE_TOOLCHAIN_FILE="${{ env.vcpkg_path }}/scripts/buildsystems/vcpkg.cmake" ` | ||||
|             -DBOOST_ROOT="${{ env.boost_path }}" ` | ||||
|             -DBUILD_SHARED_LIBS=OFF ` | ||||
|             -Ddeprecated-functions=OFF ` | ||||
|             -Dstatic_runtime=OFF ` | ||||
|             -DVCPKG_TARGET_TRIPLET=x64-windows-static-md-release | ||||
|           cmake --build build | ||||
|           cmake --install build | ||||
|       # 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: | | ||||
|           $env:CXXFLAGS+="/DQT_FORCE_ASSERTS /WX" | ||||
|           cmake ` | ||||
|             -B build ` | ||||
|             -G "Ninja" ` | ||||
|             -DCMAKE_BUILD_TYPE=RelWithDebInfo ` | ||||
|             -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ` | ||||
|             -DCMAKE_TOOLCHAIN_FILE="${{ env.vcpkg_path }}/scripts/buildsystems/vcpkg.cmake" ` | ||||
|             -DBOOST_ROOT="${{ env.boost_path }}" ` | ||||
|             -DLibtorrentRasterbar_DIR="${{ env.libtorrent_path }}/install/lib/cmake/LibtorrentRasterbar" ` | ||||
|             -DMSVC_RUNTIME_DYNAMIC=ON ` | ||||
|             -DTESTING=ON ` | ||||
|             -DVCPKG_TARGET_TRIPLET=x64-windows-static-md-release ` | ||||
|             -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 --target qbt_update_translations | ||||
|           cmake --build build | ||||
|           cmake --build build --target check | ||||
|  | ||||
|       - name: Prepare build artifacts | ||||
|         run: | | ||||
|           mkdir upload | ||||
|           mkdir upload/qBittorrent | ||||
|           copy build/qbittorrent.exe upload/qBittorrent | ||||
|           copy build/qbittorrent.pdb upload/qBittorrent | ||||
|           copy dist/windows/qt.conf upload/qBittorrent | ||||
|           # runtimes | ||||
|           copy "${{ env.Qt_ROOT_DIR }}/bin/Qt6Core.dll" upload/qBittorrent | ||||
|           copy "${{ env.Qt_ROOT_DIR }}/bin/Qt6Gui.dll" upload/qBittorrent | ||||
|           copy "${{ env.Qt_ROOT_DIR }}/bin/Qt6Network.dll" upload/qBittorrent | ||||
|           copy "${{ env.Qt_ROOT_DIR }}/bin/Qt6Sql.dll" upload/qBittorrent | ||||
|           copy "${{ env.Qt_ROOT_DIR }}/bin/Qt6Svg.dll" upload/qBittorrent | ||||
|           copy "${{ env.Qt_ROOT_DIR }}/bin/Qt6Widgets.dll" upload/qBittorrent | ||||
|           copy "${{ env.Qt_ROOT_DIR }}/bin/Qt6Xml.dll" upload/qBittorrent | ||||
|           mkdir upload/qBittorrent/plugins/iconengines | ||||
|           copy "${{ env.Qt_ROOT_DIR }}/plugins/iconengines/qsvgicon.dll" upload/qBittorrent/plugins/iconengines | ||||
|           mkdir upload/qBittorrent/plugins/imageformats | ||||
|           copy "${{ env.Qt_ROOT_DIR }}/plugins/imageformats/qico.dll" upload/qBittorrent/plugins/imageformats | ||||
|           copy "${{ env.Qt_ROOT_DIR }}/plugins/imageformats/qsvg.dll" upload/qBittorrent/plugins/imageformats | ||||
|           mkdir upload/qBittorrent/plugins/platforms | ||||
|           copy "${{ env.Qt_ROOT_DIR }}/plugins/platforms/qwindows.dll" upload/qBittorrent/plugins/platforms | ||||
|           mkdir upload/qBittorrent/plugins/sqldrivers | ||||
|           copy "${{ env.Qt_ROOT_DIR }}/plugins/sqldrivers/qsqlite.dll" upload/qBittorrent/plugins/sqldrivers | ||||
|           mkdir upload/qBittorrent/plugins/styles | ||||
|           copy "${{ env.Qt_ROOT_DIR }}/plugins/styles/qmodernwindowsstyle.dll" upload/qBittorrent/plugins/styles | ||||
|           mkdir upload/qBittorrent/plugins/tls | ||||
|           copy "${{ env.Qt_ROOT_DIR }}/plugins/tls/qschannelbackend.dll" upload/qBittorrent/plugins/tls | ||||
|           # cmake additionals | ||||
|           mkdir upload/cmake | ||||
|           copy build/compile_commands.json upload/cmake | ||||
|           copy build/target_graph.dot upload/cmake | ||||
|           mkdir upload/cmake/libtorrent | ||||
|           copy ${{ env.libtorrent_path }}/build/compile_commands.json upload/cmake/libtorrent | ||||
|  | ||||
|       - name: Upload build artifacts | ||||
|         uses: actions/upload-artifact@v4 | ||||
|         uses: actions/upload-artifact@v2 | ||||
|         with: | ||||
|           name: qBittorrent-CI_Windows-x64_libtorrent-${{ matrix.libt_version }} | ||||
|           path: upload | ||||
|  | ||||
|       - name: Create installer | ||||
|         run: | | ||||
|           7z x -o"dist/windows/" "dist/windows/NSISPlugins.zip" | ||||
|           makensis /DQBT_DIST_DIR="../../upload/qBittorrent" /WX dist/windows/qbittorrent.nsi | ||||
|  | ||||
|       - name: Upload installer | ||||
|         uses: actions/upload-artifact@v4 | ||||
|         with: | ||||
|           name: qBittorrent-CI_Windows-x64_libtorrent-${{ matrix.libt_version }}-setup | ||||
|           path: dist/windows/qbittorrent_*_setup.exe | ||||
|           name: qBittorrent-CI_Windows-x64 | ||||
|           path: | | ||||
|             build/compile_commands.json | ||||
|             build/qbittorrent.exe | ||||
|             build/qbittorrent.pdb | ||||
|             build/target_graph.dot | ||||
|             dist/windows/qt.conf | ||||
|   | ||||
							
								
								
									
										118
									
								
								.github/workflows/coverity-scan.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										118
									
								
								.github/workflows/coverity-scan.yaml
									
									
									
									
										vendored
									
									
								
							| @@ -1,118 +0,0 @@ | ||||
| name: Coverity Scan | ||||
|  | ||||
| on: | ||||
|   schedule: | ||||
|     - cron: '0 0 1 * *' # Monthly (1st day of month at midnight) | ||||
|   workflow_dispatch: # Mainly for testing. Don't forget the Coverity usage limits. | ||||
|  | ||||
| permissions: {} | ||||
|  | ||||
| jobs: | ||||
|   coverity_scan: | ||||
|     name: Scan | ||||
|     runs-on: ubuntu-latest | ||||
|  | ||||
|     strategy: | ||||
|       matrix: | ||||
|         libt_version: ["2.0.11"] | ||||
|         qbt_gui: ["GUI=ON"] | ||||
|         qt_version: ["6.5.2"] | ||||
|  | ||||
|     env: | ||||
|       boost_path: "${{ github.workspace }}/../boost" | ||||
|       coverity_path: "${{ github.workspace }}/../coverity" | ||||
|       libtorrent_path: "${{ github.workspace }}/../libtorrent" | ||||
|  | ||||
|     steps: | ||||
|       - name: Checkout repository | ||||
|         uses: actions/checkout@v4 | ||||
|         with: | ||||
|           persist-credentials: false | ||||
|  | ||||
|       - name: Install dependencies | ||||
|         run: | | ||||
|           sudo apt update | ||||
|           sudo apt install \ | ||||
|             build-essential cmake ninja-build \ | ||||
|             libssl-dev libxkbcommon-x11-dev libxcb-cursor-dev zlib1g-dev | ||||
|  | ||||
|       - name: Install boost | ||||
|         env: | ||||
|           BOOST_MAJOR_VERSION: "1" | ||||
|           BOOST_MINOR_VERSION: "86" | ||||
|           BOOST_PATCH_VERSION: "0" | ||||
|         run: | | ||||
|           boost_url="https://archives.boost.io/release/${{ env.BOOST_MAJOR_VERSION }}.${{ env.BOOST_MINOR_VERSION }}.${{ env.BOOST_PATCH_VERSION }}/source/boost_${{ env.BOOST_MAJOR_VERSION }}_${{ env.BOOST_MINOR_VERSION }}_${{ env.BOOST_PATCH_VERSION }}.tar.gz" | ||||
|           boost_url2="https://sourceforge.net/projects/boost/files/boost/${{ env.BOOST_MAJOR_VERSION }}.${{ env.BOOST_MINOR_VERSION }}.${{ env.BOOST_PATCH_VERSION }}/boost_${{ env.BOOST_MAJOR_VERSION }}_${{ env.BOOST_MINOR_VERSION }}_${{ env.BOOST_PATCH_VERSION }}.tar.gz" | ||||
|           set +e | ||||
|           curl -L -o "${{ runner.temp }}/boost.tar.gz" "$boost_url" | ||||
|           tar -xf "${{ runner.temp }}/boost.tar.gz" -C "${{ github.workspace }}/.."; _exitCode="$?" | ||||
|           if [ "$_exitCode" -ne "0" ]; then | ||||
|             curl -L -o "${{ runner.temp }}/boost.tar.gz" "$boost_url2" | ||||
|             tar -xf "${{ runner.temp }}/boost.tar.gz" -C "${{ github.workspace }}/.."; _exitCode="$?" | ||||
|           fi | ||||
|           mv "${{ github.workspace }}/.."/boost_* "${{ env.boost_path }}" | ||||
|  | ||||
|       - name: Install Qt | ||||
|         uses: jurplel/install-qt-action@v4 | ||||
|         with: | ||||
|           version: ${{ matrix.qt_version }} | ||||
|           archives: icu qtbase qtdeclarative qtsvg qttools | ||||
|           cache: true | ||||
|  | ||||
|       - name: Install libtorrent | ||||
|         run: | | ||||
|           git clone \ | ||||
|             --branch v${{ matrix.libt_version }} \ | ||||
|             --depth 1 \ | ||||
|             --recurse-submodules \ | ||||
|             https://github.com/arvidn/libtorrent.git \ | ||||
|             ${{ env.libtorrent_path }} | ||||
|           cd ${{ env.libtorrent_path }} | ||||
|           cmake \ | ||||
|             -B build \ | ||||
|             -G "Ninja" \ | ||||
|             -DCMAKE_BUILD_TYPE=RelWithDebInfo \ | ||||
|             -DCMAKE_CXX_STANDARD=20 \ | ||||
|             -DBOOST_ROOT="${{ env.boost_path }}" \ | ||||
|             -Ddeprecated-functions=OFF | ||||
|           cmake --build build | ||||
|           sudo cmake --install build | ||||
|  | ||||
|       - name: Download Coverity Build Tool | ||||
|         run: | | ||||
|           curl \ | ||||
|             -L \ | ||||
|             -d "token=${{ secrets.COVERITY_SCAN_TOKEN }}&project=qbittorrent%2FqBittorrent" \ | ||||
|             -o "${{ runner.temp }}/coverity_tool.tgz" \ | ||||
|             "https://scan.coverity.com/download/linux64" | ||||
|           mkdir -p ${{ env.coverity_path }} | ||||
|           tar \ | ||||
|             -xf "${{ runner.temp }}/coverity_tool.tgz" \ | ||||
|             -C "${{ env.coverity_path }}" \ | ||||
|             --strip-components 1 | ||||
|  | ||||
|       - name: Build qBittorrent | ||||
|         run: | | ||||
|           cmake \ | ||||
|             -B build \ | ||||
|             -G "Ninja" \ | ||||
|             -DCMAKE_BUILD_TYPE=RelWithDebInfo \ | ||||
|             -DBOOST_ROOT="${{ env.boost_path }}" \ | ||||
|             -DVERBOSE_CONFIGURE=ON \ | ||||
|             -D${{ matrix.qbt_gui }} | ||||
|           PATH="${{ env.coverity_path }}/bin:$PATH" \ | ||||
|           cov-build \ | ||||
|             --dir cov-int \ | ||||
|             cmake --build build | ||||
|  | ||||
|       - name: Submit the result to Coverity Scan | ||||
|         run: | | ||||
|           tar -caf qbittorrent.xz cov-int | ||||
|           curl \ | ||||
|             --form token="${{ secrets.COVERITY_SCAN_TOKEN }}" \ | ||||
|             --form email=sledgehammer999@qbittorrent.org \ | ||||
|             --form file=@qbittorrent.xz \ | ||||
|             --form version="$(git rev-parse --short HEAD)" \ | ||||
|             --form description="master" \ | ||||
|             https://scan.coverity.com/builds?project=qbittorrent%2FqBittorrent | ||||
							
								
								
									
										85
									
								
								.github/workflows/file_health.sh
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										85
									
								
								.github/workflows/file_health.sh
									
									
									
									
										vendored
									
									
										Executable file
									
								
							| @@ -0,0 +1,85 @@ | ||||
| #!/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; | ||||
							
								
								
									
										13
									
								
								.github/workflows/helper/appimage/export_vars.sh
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										13
									
								
								.github/workflows/helper/appimage/export_vars.sh
									
									
									
									
										vendored
									
									
								
							| @@ -1,13 +0,0 @@ | ||||
| #!/bin/sh | ||||
|  | ||||
| # this file is called from AppRun so 'root_dir' will point to where AppRun is | ||||
| root_dir="$(readlink -f "$(dirname "$0")")" | ||||
|  | ||||
| # Insert the default values because after the test we prepend our path | ||||
| # and it will create problems with DEs (eg KDE) that don't set the variable | ||||
| # and rely on the default paths | ||||
| if [ -z "${XDG_DATA_DIRS}" ]; then | ||||
|     XDG_DATA_DIRS="/usr/local/share/:/usr/share/" | ||||
| fi | ||||
|  | ||||
| export XDG_DATA_DIRS="${root_dir}/usr/share:${XDG_DATA_DIRS}" | ||||
| @@ -1,6 +0,0 @@ | ||||
| [Desktop Entry] | ||||
| Name=qBittorrent | ||||
| Exec=qbittorrent-nox %U | ||||
| Icon=qbittorrent | ||||
| Type=Application | ||||
| Categories=Network | ||||
							
								
								
									
										14
									
								
								.github/workflows/helper/codeql/cpp.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										14
									
								
								.github/workflows/helper/codeql/cpp.yaml
									
									
									
									
										vendored
									
									
								
							| @@ -1,14 +0,0 @@ | ||||
| name: "CodeQL config for C++" | ||||
|  | ||||
| queries: | ||||
|   - uses: security-and-quality | ||||
|  | ||||
| query-filters: | ||||
|   - exclude: | ||||
|       id: cpp/commented-out-code | ||||
|   - exclude: | ||||
|       id: cpp/include-non-header | ||||
|   - exclude: | ||||
|       id: cpp/loop-variable-changed | ||||
|   - exclude: | ||||
|       id: cpp/useless-expression | ||||
							
								
								
									
										11
									
								
								.github/workflows/helper/codeql/js.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										11
									
								
								.github/workflows/helper/codeql/js.yaml
									
									
									
									
										vendored
									
									
								
							| @@ -1,11 +0,0 @@ | ||||
| name: "CodeQL config for Javascript" | ||||
|  | ||||
| paths-ignore: | ||||
|   - "**/lib/*" | ||||
|  | ||||
| queries: | ||||
|   - uses: security-and-quality | ||||
|  | ||||
| query-filters: | ||||
|   - exclude: | ||||
|       id: js/superfluous-trailing-arguments | ||||
							
								
								
									
										20
									
								
								.github/workflows/helper/pre-commit/.typos.toml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										20
									
								
								.github/workflows/helper/pre-commit/.typos.toml
									
									
									
									
										vendored
									
									
								
							| @@ -1,20 +0,0 @@ | ||||
| # https://github.com/crate-ci/typos/blob/master/docs/reference.md | ||||
| # https://github.com/crate-ci/typos/blob/master/docs/design.md#identifiers-and-words | ||||
|  | ||||
| # try adding to `identifiers` list first, if doesn't work then `words` list | ||||
|  | ||||
| [default.extend-identifiers] | ||||
| additionals = "additionals" | ||||
| caf = "caf" | ||||
| curren = "curren" | ||||
| FO = "FO" | ||||
| ket = "ket" | ||||
| Q_INVOKABLE = "Q_INVOKABLE" | ||||
| switchs = "switchs" | ||||
| ths = "ths" | ||||
|  | ||||
| [default.extend-words] | ||||
| BA = "BA" | ||||
| helo = "helo" | ||||
| Pn = "Pn" | ||||
| UIU = "UIU" | ||||
| @@ -1,95 +0,0 @@ | ||||
| #!/usr/bin/env python3 | ||||
|  | ||||
| # A pre-commit hook for checking items order in grid layouts | ||||
| # Copyright (C) 2024  Mike Tzou (Chocobo1) | ||||
| # | ||||
| # This program is free software; you can redistribute it and/or | ||||
| # modify it under the terms of the GNU General Public License | ||||
| # as published by the Free Software Foundation; either version 2 | ||||
| # of the License, or (at your option) any later version. | ||||
| # | ||||
| # This program is distributed in the hope that it will be useful, | ||||
| # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| # GNU General Public License for more details. | ||||
| # | ||||
| # You should have received a copy of the GNU General Public License | ||||
| # along with this program; if not, write to the Free Software | ||||
| # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. | ||||
| # | ||||
| # In addition, as a special exception, the copyright holders give permission to | ||||
| # link this program with the OpenSSL project's "OpenSSL" library (or with | ||||
| # modified versions of it that use the same license as the "OpenSSL" library), | ||||
| # and distribute the linked executables. You must obey the GNU General Public | ||||
| # License in all respects for all of the code used other than "OpenSSL".  If you | ||||
| # modify file(s), you may extend this exception to your version of the file(s), | ||||
| # but you are not obligated to do so. If you do not wish to do so, delete this | ||||
| # exception statement from your version. | ||||
|  | ||||
| from collections.abc import Callable, Sequence | ||||
| from typing import Optional | ||||
| import argparse | ||||
| import re | ||||
| import xml.etree.ElementTree as ElementTree | ||||
| import sys | ||||
|  | ||||
|  | ||||
| def traversePostOrder(root: ElementTree.Element, visitFunc: Callable[[ElementTree.Element], None]) -> None: | ||||
|     stack = [(root, False)] | ||||
|  | ||||
|     while len(stack) > 0: | ||||
|         (element, visit) = stack.pop() | ||||
|         if visit: | ||||
|             visitFunc(element) | ||||
|         else: | ||||
|             stack.append((element, True)) | ||||
|             stack.extend((child, False) for child in reversed(element)) | ||||
|  | ||||
|  | ||||
| def modifyElement(element: ElementTree.Element) -> None: | ||||
|     def getSortKey(e: ElementTree.Element) -> tuple[int, int]: | ||||
|         if e.tag == 'item': | ||||
|             return (int(e.attrib['row']), int(e.attrib['column'])) | ||||
|         return (-1, -1)  # don't care | ||||
|  | ||||
|     if element.tag == 'layout' and element.attrib['class'] == 'QGridLayout' and len(element) > 0: | ||||
|         element[:] = sorted(element, key=getSortKey) | ||||
|  | ||||
|     # workaround_2a: ElementTree will unescape `"` and we need to escape it back | ||||
|     if element.tag == 'string' and element.text is not None: | ||||
|         element.text = element.text.replace('"', '"') | ||||
|  | ||||
|  | ||||
| def main(argv: Optional[Sequence[str]] = None) -> int: | ||||
|     parser = argparse.ArgumentParser() | ||||
|     parser.add_argument('filenames', nargs='*', help='Filenames to check') | ||||
|     args = parser.parse_args(argv) | ||||
|  | ||||
|     for filename in args.filenames: | ||||
|         with open(filename, 'r+') as f: | ||||
|             orig = f.read() | ||||
|             root = ElementTree.fromstring(orig) | ||||
|             traversePostOrder(root, modifyElement) | ||||
|             ElementTree.indent(root, ' ') | ||||
|  | ||||
|             # workaround_1: cannot use `xml_declaration=True` since it uses single quotes instead of Qt preferred double quotes | ||||
|             ret = f'<?xml version="1.0" encoding="UTF-8"?>\n{ElementTree.tostring(root, 'unicode')}\n' | ||||
|  | ||||
|             # workaround_2b: ElementTree will turn `"` into `&quot;`, so revert it back | ||||
|             ret = ret.replace('&quot;', '"') | ||||
|  | ||||
|             # workaround_3: Qt prefers no whitespaces in self-closing tags | ||||
|             ret = re.sub('<(.+) +/>', r'<\1/>', ret) | ||||
|  | ||||
|             if ret != orig: | ||||
|                 print(f'Tip: run this script to apply the fix: `python {__file__} {filename}`', file=sys.stderr) | ||||
|  | ||||
|                 f.seek(0) | ||||
|                 f.write(ret) | ||||
|                 f.truncate() | ||||
|  | ||||
|     return 0 | ||||
|  | ||||
|  | ||||
| if __name__ == '__main__': | ||||
|     sys.exit(main()) | ||||
| @@ -1,72 +0,0 @@ | ||||
| #!/usr/bin/env python3 | ||||
|  | ||||
| # A pre-commit hook for detecting problematic <translation> tags | ||||
| # Copyright (C) 2021  Mike Tzou (Chocobo1) | ||||
| # | ||||
| # This program is free software; you can redistribute it and/or | ||||
| # modify it under the terms of the GNU General Public License | ||||
| # as published by the Free Software Foundation; either version 2 | ||||
| # of the License, or (at your option) any later version. | ||||
| # | ||||
| # This program is distributed in the hope that it will be useful, | ||||
| # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| # GNU General Public License for more details. | ||||
| # | ||||
| # You should have received a copy of the GNU General Public License | ||||
| # along with this program; if not, write to the Free Software | ||||
| # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. | ||||
| # | ||||
| # In addition, as a special exception, the copyright holders give permission to | ||||
| # link this program with the OpenSSL project's "OpenSSL" library (or with | ||||
| # modified versions of it that use the same license as the "OpenSSL" library), | ||||
| # and distribute the linked executables. You must obey the GNU General Public | ||||
| # License in all respects for all of the code used other than "OpenSSL".  If you | ||||
| # modify file(s), you may extend this exception to your version of the file(s), | ||||
| # but you are not obligated to do so. If you do not wish to do so, delete this | ||||
| # exception statement from your version. | ||||
|  | ||||
| from collections.abc import Sequence | ||||
| from typing import Optional | ||||
| import argparse | ||||
| import re | ||||
| import sys | ||||
|  | ||||
|  | ||||
| def main(argv: Optional[Sequence[str]] = None) -> int: | ||||
|     parser = argparse.ArgumentParser() | ||||
|     parser.add_argument('filenames', nargs='*', help='Filenames to check') | ||||
|     args = parser.parse_args(argv) | ||||
|  | ||||
|     error_msg = "" | ||||
|     regex = re.compile(r"\s*</translation>") | ||||
|  | ||||
|     for filename in args.filenames: | ||||
|         line_counter = 1 | ||||
|         error_buffer = "" | ||||
|  | ||||
|         with open(filename) as file: | ||||
|             try: | ||||
|                 for line in file: | ||||
|                     if (match := regex.match(line)) is not None: | ||||
|                         error_buffer += str(f"Defect file: \"{filename}\"\n" | ||||
|                                             f"Line: {line_counter}\n" | ||||
|                                             f"Column span: {match.span()}\n" | ||||
|                                             f"Part: \"{match.group()}\"\n\n") | ||||
|                     line_counter += 1 | ||||
|  | ||||
|             except UnicodeDecodeError: | ||||
|                 # not a text file, skip | ||||
|                 continue | ||||
|  | ||||
|         error_msg += error_buffer | ||||
|  | ||||
|     if len(error_msg) > 0: | ||||
|         print(error_msg) | ||||
|         return 1 | ||||
|  | ||||
|     return 0 | ||||
|  | ||||
|  | ||||
| if __name__ == '__main__': | ||||
|     sys.exit(main()) | ||||
							
								
								
									
										26
									
								
								.github/workflows/stale_bot.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										26
									
								
								.github/workflows/stale_bot.yaml
									
									
									
									
										vendored
									
									
								
							| @@ -1,26 +0,0 @@ | ||||
| name: Stale bot | ||||
|  | ||||
| on: | ||||
|   schedule: | ||||
|     - cron: '0 0 * * *' | ||||
|  | ||||
| permissions: {} | ||||
|  | ||||
| jobs: | ||||
|   stale: | ||||
|     runs-on: ubuntu-latest | ||||
|     permissions: | ||||
|       pull-requests: write | ||||
|     steps: | ||||
|       - name: Mark and close stale PRs | ||||
|         uses: actions/stale@v9 | ||||
|         with: | ||||
|           stale-pr-message: "This PR is stale because it has been 60 days with no activity. This PR will be automatically closed within 7 days if there is no further activity." | ||||
|           close-pr-message: "This PR was closed because it has been stalled for some time with no activity." | ||||
|           days-before-stale: -1 # avoid marking issues | ||||
|           days-before-pr-stale: 60 | ||||
|           days-before-close: -1 # avoid closing issues | ||||
|           days-before-pr-close: 7 | ||||
|           exempt-all-pr-assignees: true  # avoid stale for all PR with assignees | ||||
|           exempt-all-pr-milestones: true # avoid stale for all PR with milestones | ||||
|           operations-per-run: 200 | ||||
							
								
								
									
										9
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										9
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -1,4 +1,3 @@ | ||||
| .vscode/ | ||||
| src/gui/geoip/GeoIP.dat | ||||
| src/gui/geoip/GeoIP.dat.gz | ||||
| src/qbittorrent | ||||
| @@ -17,7 +16,6 @@ Makefile* | ||||
| *.o | ||||
| *.pdb | ||||
| *.exe | ||||
| *.dll | ||||
|  | ||||
| # Generated MOC, resource and UI files | ||||
| moc_*.cpp | ||||
| @@ -25,7 +23,8 @@ moc_*.h | ||||
| qrc_*.cpp | ||||
| ui_*.h | ||||
| *.moc | ||||
| *.qm | ||||
| src/lang/qbittorrent_*.qm | ||||
| src/webui/www/translations/webui_*.qm | ||||
| .DS_Store | ||||
| .qmake.stash | ||||
| src/qbittorrent.app | ||||
| @@ -41,3 +40,7 @@ src/icons/skin/build-icons/icons/*.png | ||||
|  | ||||
| # CMake build directory | ||||
| build/ | ||||
|  | ||||
| # Web UI tools | ||||
| node_modules | ||||
| package-lock.json | ||||
|   | ||||
| @@ -1,110 +0,0 @@ | ||||
| repos: | ||||
|   - repo: local | ||||
|     hooks: | ||||
|       - id: check-grid-order | ||||
|         name: Check items order in grid layouts | ||||
|         entry: .github/workflows/helper/pre-commit/check_grid_items_order.py | ||||
|         language: script | ||||
|         files: \.ui$ | ||||
|  | ||||
|       - id: check-translation-tag | ||||
|         name: Check newline characters in <translation> tag | ||||
|         entry: .github/workflows/helper/pre-commit/check_translation_tag.py | ||||
|         language: script | ||||
|         exclude: | | ||||
|           (?x)^( | ||||
|             src/lang/.* | ||||
|           )$ | ||||
|         types_or: | ||||
|           - ts | ||||
|  | ||||
|   - repo: https://github.com/pre-commit/pre-commit-hooks.git | ||||
|     rev: v5.0.0 | ||||
|     hooks: | ||||
|     - id: check-json | ||||
|       name: Check JSON files | ||||
|  | ||||
|     - id: check-yaml | ||||
|       name: Check YAML files | ||||
|  | ||||
|     - id: fix-byte-order-marker | ||||
|       name: Check file encoding (UTF-8 without BOM) | ||||
|       exclude: | | ||||
|         (?x)^( | ||||
|           src/base/unicodestrings.h | ||||
|         )$ | ||||
|  | ||||
|     - id: mixed-line-ending | ||||
|       name: Check line ending character (LF) | ||||
|       args: ["--fix=lf"] | ||||
|       exclude: | | ||||
|         (?x)^( | ||||
|           src/webui/www/private/css/lib/.* | | ||||
|           src/webui/www/private/scripts/lib/.* | | ||||
|           dist/windows/license.txt | | ||||
|           test/testdata/crlf.txt | ||||
|         )$ | ||||
|  | ||||
|     - id: end-of-file-fixer | ||||
|       name: Check trailing newlines | ||||
|       exclude: | | ||||
|         (?x)^( | ||||
|           configure | | ||||
|           src/webui/www/private/css/lib/.* | | ||||
|           src/webui/www/private/scripts/lib/.* | | ||||
|           test/testdata/crlf.txt | ||||
|         )$ | ||||
|       exclude_types: | ||||
|         - svg | ||||
|         - ts | ||||
|  | ||||
|     - id: trailing-whitespace | ||||
|       name: Check trailing whitespaces | ||||
|       exclude: | | ||||
|         (?x)^( | ||||
|           src/webui/www/private/css/lib/.* | | ||||
|           src/webui/www/private/scripts/lib/.* | ||||
|         )$ | ||||
|       exclude_types: | ||||
|         - ts | ||||
|  | ||||
|   - repo: https://github.com/codespell-project/codespell.git | ||||
|     rev: v2.4.0 | ||||
|     hooks: | ||||
|     - id: codespell | ||||
|       name: Check spelling (codespell) | ||||
|       args: ["--ignore-words-list", "additionals,categor,curren,fo,ist,ket,notin,searchin,sectionin,superseeding,te,ths"] | ||||
|       exclude: | | ||||
|         (?x)^( | ||||
|           .*\.desktop | | ||||
|           .*\.qrc | | ||||
|           Changelog | | ||||
|           dist/windows/installer-translations/.* | | ||||
|           src/base/3rdparty/.* | | ||||
|           src/searchengine/nova3/socks.py | | ||||
|           src/webui/www/private/scripts/lib/.* | ||||
|         )$ | ||||
|       exclude_types: | ||||
|         - ts | ||||
|  | ||||
|   - repo: https://github.com/crate-ci/typos.git | ||||
|     rev: v1.29.4 | ||||
|     hooks: | ||||
|     - id: typos | ||||
|       name: Check spelling (typos) | ||||
|       args: ["--config", ".github/workflows/helper/pre-commit/.typos.toml"] | ||||
|       exclude: | | ||||
|         (?x)^( | ||||
|           .*\.asc | | ||||
|           .*\.desktop | | ||||
|           .*\.qrc | | ||||
|           \.pre-commit-config\.yaml | | ||||
|           Changelog | | ||||
|           dist/windows/installer-translations/.* | | ||||
|           src/base/3rdparty/.* | | ||||
|           src/searchengine/nova3/socks.py | | ||||
|           src/webui/www/private/scripts/lib/.* | ||||
|         )$ | ||||
|       exclude_types: | ||||
|         - svg | ||||
|         - ts | ||||
							
								
								
									
										35
									
								
								.tx/config
									
									
									
									
									
								
							
							
						
						
									
										35
									
								
								.tx/config
									
									
									
									
									
								
							| @@ -1,24 +1,27 @@ | ||||
| [main] | ||||
| host = https://www.transifex.com | ||||
|  | ||||
| [o:sledgehammer999:p:qbittorrent:r:qbittorrent_v51x] | ||||
| file_filter  = src/lang/qbittorrent_<lang>.ts | ||||
| source_file  = src/lang/qbittorrent_en.ts | ||||
| source_lang  = en | ||||
| type         = QT | ||||
| [qbittorrent.qbittorrent_master] | ||||
| file_filter = src/lang/qbittorrent_<lang>.ts | ||||
| lang_map = pt: pt_PT | ||||
| source_file = src/lang/qbittorrent_en.ts | ||||
| source_lang = en | ||||
| type = QT | ||||
| minimum_perc = 23 | ||||
| lang_map     = pt: pt_PT, zh: zh_CN | ||||
| mode = developer | ||||
|  | ||||
| [o:sledgehammer999:p:qbittorrent:r:qbittorrent_webui_v51x] | ||||
| file_filter  = src/webui/www/translations/webui_<lang>.ts | ||||
| source_file  = src/webui/www/translations/webui_en.ts | ||||
| source_lang  = en | ||||
| type         = QT | ||||
| [qbittorrent.qbittorrentdesktop_master] | ||||
| source_file = dist/unix/org.qbittorrent.qBittorrent.desktop | ||||
| source_lang = en | ||||
| type = DESKTOP | ||||
| minimum_perc = 23 | ||||
| lang_map     = pt: pt_PT, zh: zh_CN | ||||
| mode = developer | ||||
|  | ||||
| [o:sledgehammer999:p:qbittorrent:r:qbittorrentdesktop_master] | ||||
| source_file  = dist/unix/org.qbittorrent.qBittorrent.desktop | ||||
| source_lang  = en | ||||
| type         = DESKTOP | ||||
| [qbittorrent.qbittorrent_webui] | ||||
| file_filter = src/webui/www/translations/webui_<lang>.ts | ||||
| lang_map = pt: pt_PT | ||||
| source_file = src/webui/www/translations/webui_en.ts | ||||
| source_lang = en | ||||
| type = QT | ||||
| minimum_perc = 23 | ||||
| mode = developer | ||||
|   | ||||
							
								
								
									
										91
									
								
								AUTHORS
									
									
									
									
									
								
							
							
						
						
									
										91
									
								
								AUTHORS
									
									
									
									
									
								
							| @@ -29,66 +29,73 @@ Code from other projects: | ||||
|   copyright: Dan Haim <negativeiq@users.sourceforge.net> | ||||
|   license: BSD | ||||
|  | ||||
| * files src/webui/www/private/css/lib/vanillaSelectBox.css src/webui/www/private/scripts/lib/vanillaSelectBox.js | ||||
|   copyright: Philippe Meyer <pmg.meyer@gmail.com> | ||||
|   license: MIT | ||||
| * file src/app/stacktrace.h | ||||
|   copyright: Timo Bingmann from http://idlebox.net/ | ||||
|   license: WTFPL v2.0 | ||||
|  | ||||
| * file src/app/stacktrace_win.h | ||||
|   copyright: Quassel Project | ||||
|   license: GPLv2/3 | ||||
|  | ||||
| Images Authors: | ||||
| * files: src/icons/qbittorrent-tray.svg | ||||
| * files: src/icons/skin/qbittorrent-tray.svg (and related pngs) | ||||
|   copyright: Provided by HVS <hvs linuxmail org> (raster first proposal) and Atif Afzal(@atfzl github) <atif5801@gmail.com> (vectorized and modified) | ||||
|   license: GPLv2+ | ||||
|  | ||||
| * files: src/qbittorrent_file.ico src/icons/fileicon.svg | ||||
|   copyright: 'unknown.svg' (LGPLv3+) from Oxygen Icon Theme was used as base which was slightly modified and 'qbittorrent-tray.svg' (GPLv2+) was overlaid above it. | ||||
|   copyright: 'uknown.svg' (LGPLv3+) from Oxygen Icon Theme was used as base which was slightly modified and 'qbittorrent-tray.svg' (GPLv2+) was overlayed above it. | ||||
|   license: GPLv3+ | ||||
|  | ||||
| * files: src/icons/flags/*.svg | ||||
|   copyright: lipis/flag-icons | ||||
|   license: MIT | ||||
|   url: https://github.com/lipis/flag-icons/ | ||||
| * files: src/icons/*.png | ||||
|   copyright: Gnome Icon Theme | ||||
|   license: GPLv2 | ||||
|   url: http://ftp.acc.umu.se/pub/GNOME/sources/gnome-icon-theme | ||||
|  | ||||
| * file: src/webui/www/private/images/tabs.gif | ||||
| * files: src/oxygen/*.png | ||||
|   copyright: Oxygen Icon Theme (KDE) | ||||
|   license: LGPL | ||||
|   url: http://www.oxygen-icons.org | ||||
|  | ||||
| * files: src/icons/flags/*.svg | ||||
|   copyright: lipis/flag-icon-css | ||||
|   license: MIT | ||||
|   url: https://github.com/lipis/flag-icon-css/ | ||||
|  | ||||
| * files: src/icons/skin/*.png | ||||
|   files: src/menuicons/YYxYY/*.png | ||||
|   copyright: Mateusz Tobola <tobejodok@qbittorrent.org> | ||||
|   license: GPLv2 | ||||
|  | ||||
| * file: src/icons/tabs.gif | ||||
|   copyright: Greg Houston <gregory.houston@gmail.com> | ||||
|   license: MIT | ||||
|  | ||||
| * file: src/icons/qbittorrent-tray-dark.svg src/icons/qbittorrent-tray-light.svg | ||||
| * file: src/icons/skin/qbittorrent_mono* | ||||
|   copyright: Daniel Eguren <deguren@gmail.com> | ||||
|   modified by: now-im <now-im.d8gcu@simplelogin.com> (@now-im) | ||||
|   license: LGPL | ||||
|  | ||||
| * folder: src/icons/ | ||||
|   files: application-rss+xml.svg, application-x-mswinurl.svg, connected.svg, disconnected.svg, checked-completed.svg, configure.svg, | ||||
|          edit-copy.svg, edit-rename.svg, folder-documents.svg, folder-new.svg, folder-remote.svg, go-bottom.svg, go-down.svg, go-top.svg, | ||||
|          go-up.svg, hash.svg, inode-directory.svg, insert-link.svg, kt-magnet.svg, media-playback-pause.svg, media-playback-start.svg, | ||||
|          media-seek-forward.svg, network-connect.svg, object-locked.svg, queued.svg, ratio.svg, reannounce.svg, slow_off.svg, slow.svg, | ||||
|          speedometer.svg, system-log-out.svg, tags.svg, task-complete.svg, task-reject.svg, tracker-error.svg, tracker-warning.svg, | ||||
|          trackerless.svg, trackers.svg, view-categories.svg | ||||
|   copyright: now-im <now-im.d8gcu@simplelogin.com> (@now-im) modified from La-Capitaine icon theme (https://github.com/keeferrourke/la-capitaine-icon-theme) | ||||
|   license: GPLv3+ | ||||
| * file: src/search_engine/engines/btjunkie.png | ||||
|   copyright: Downloaded from btjunkie.org | ||||
|  | ||||
| * folder: src/icons/ | ||||
|   files: application-exit.svg, collapse.svg, dialog-warning.svg, edit-find-user.svg, edit-find.svg, filter-all.svg, firewalled.svg, | ||||
|          help-about.svg, help-contents.svg, ip-blocked.svg, list-remove.svg, loading.svg, mail-folder-inbox.svg, name.svg, network-server.svg, | ||||
|          office-chart-line.svg, plugins.svg, preferences-desktop.svg, preferences-other.svg, preferences-system-network.svg, security-high.svg, | ||||
|          security-low.svg, set-location.svg, torrent-creator.svg, user-group-delete.svg, user-group-new.svg, view-preview.svg, view-refresh.svg, | ||||
|          view-statistics.svg, wallet-open.svg, webuiapplication-exit.svg, collapse.svg, dialog-warning.svg, edit-find-user.svg, edit-find.svg, | ||||
|          filter-all.svg, firewalled.svg, help-about.svg, help-contents.svg, ip-blocked.svg, list-remove.svg, loading.svg, mail-folder-inbox.svg, | ||||
|          name.svg, network-server.svg, office-chart-line.svg, plugins.svg, preferences-desktop.svg, preferences-other.svg, | ||||
|          preferences-system-network.svg, security-high.svg, security-low.svg, set-location.svg, torrent-creator.svg, user-group-delete.svg, | ||||
|          user-group-new.svg, view-preview.svg, view-refresh.svg, view-statistics.svg, wallet-open.svg, webui.svg | ||||
|   copyright: now-im <now-im.d8gcu@simplelogin.com> (@now-im) modified from Ionicons icon theme (https://github.com/ionic-team/ionicons) | ||||
|   license: MIT | ||||
| * file: src/search_engine/engines/isohunt.png | ||||
|   copyright: Downloaded from isohunt.com | ||||
|  | ||||
| * folder: src/icons/ | ||||
|   files: force-recheck.svg | ||||
|   copyright: now-im <now-im.d8gcu@simplelogin.com> (@now-im) modified from Font-Awesome icon theme (https://github.com/FortAwesome/Font-Awesome) | ||||
|   license: CC BY 4.0 License | ||||
| * file: src/search_engine/engines/mininova.png | ||||
|   copyright: Downloaded from mininova.org | ||||
|  | ||||
| * folder: src/icons/ | ||||
|   files: downloading.svg, edit-clear.svg, error.svg, filter-active.svg, filter-inactive.svg, filter-stalled.svg, kt-set-max-download-speed.svg, | ||||
|          kt-set-max-upload-speed.svg, list-add.svg, preferences-web-browser-cookies.svg, stalledDL.svg, stalledUP.svg | ||||
|   copyright: now-im <now-im.d8gcu@simplelogin.com> (@now-im) | ||||
|   license: BSD 2-Clause License | ||||
| * file: src/search_engine/engines/piratebay.png | ||||
|   copyright: Downloaded from thepiratebay.org | ||||
|  | ||||
| * file: src/search_engine/engines/torrentreactor.png | ||||
|   copyright: Downloaded from torrentreactor.net | ||||
|  | ||||
| * file: src/icons/oxygen/checked.png | ||||
|   copyright: Victor Buinsky <allok.victor@gmail.com> | ||||
|  | ||||
| * file: src/icons/skin/ratio.png | ||||
|   copyright: Fatcow Web Hosting | ||||
|   license: Creative Commons Attribution 3.0 License | ||||
|   url: http://www.fatcow.com/free-icons | ||||
|  | ||||
| Translations authors: | ||||
| * files: src/lang/*.ts | ||||
|   | ||||
| @@ -1,67 +1,64 @@ | ||||
| cmake_minimum_required(VERSION 3.16 FATAL_ERROR) # Policies <= CMP0097 default to NEW | ||||
|  | ||||
| list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules) | ||||
|  | ||||
| project(qBittorrent | ||||
|     DESCRIPTION "The qBittorrent BitTorrent client" | ||||
|     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.76) | ||||
| set(minQt6Version 6.5.0) | ||||
| set(minOpenSSLVersion 3.0.2) | ||||
| set(minLibtorrent1Version 1.2.19) | ||||
| set(minLibtorrentVersion 2.0.10) | ||||
| set(minBoostVersion 1.65) | ||||
| set(minQtVersion 5.11) | ||||
| set(minOpenSSLVersion 1.1.1) | ||||
| set(minLibtorrentVersion 1.2.12) | ||||
| set(minZlibVersion 1.2.11) | ||||
|  | ||||
| include(GNUInstallDirs) | ||||
|  | ||||
| list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules) | ||||
| # features (some are platform-specific) | ||||
| include(CheckCXXSourceCompiles) # TODO: migrate to CheckSourceCompiles in CMake >= 3.19 | ||||
| include(FeatureSummary) | ||||
| include(FeatureOptionsSetup) | ||||
|  | ||||
| # features, list is loosely sorted by user's interests | ||||
| feature_option(STACKTRACE "Enable stacktraces" ON) | ||||
| feature_option(GUI "Build GUI application" ON) | ||||
| feature_option(WEBUI "Enable built-in HTTP server for remote control" ON) | ||||
| feature_option(STACKTRACE "Enable stacktrace support" ON) | ||||
| feature_option(TESTING "Build internal testing suite" OFF) | ||||
| 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" OR CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") | ||||
| if (CMAKE_SYSTEM_NAME STREQUAL "Linux") | ||||
|     feature_option_dependent(DBUS | ||||
|         "Enable support for notifications and power-management features via D-Bus" | ||||
|         "Enables support for notifications and power-management features on Linux via D-Bus" | ||||
|         ON "GUI" OFF | ||||
|     ) | ||||
| endif() | ||||
|  | ||||
| if (CMAKE_SYSTEM_NAME STREQUAL "Linux") | ||||
|     feature_option_dependent(SYSTEMD | ||||
|         "Install systemd service file. Target directory is overridable with `SYSTEMD_SERVICES_INSTALL_DIR` variable" | ||||
|         "Install systemd service file to a directory manually overridable with Systemd_SERVICES_INSTALL_DIR" | ||||
|         OFF "NOT GUI" OFF | ||||
|     ) | ||||
| endif() | ||||
|  | ||||
| if (MSVC) | ||||
|     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() | ||||
|  | ||||
| include(GNUInstallDirs) | ||||
| add_subdirectory(src) | ||||
| add_subdirectory(dist) | ||||
|  | ||||
| if (VERBOSE_CONFIGURE) | ||||
|     feature_summary(WHAT ALL) | ||||
| else() | ||||
|     feature_summary(WHAT ENABLED_FEATURES DISABLED_FEATURES) | ||||
| endif() | ||||
|  | ||||
| # go check the packages | ||||
| include(CheckPackages) | ||||
| # configure for specific platform | ||||
| include(CommonConfig) | ||||
|  | ||||
| # Generate version header | ||||
| configure_file("src/base/version.h.in" "${CMAKE_CURRENT_SOURCE_DIR}/src/base/version.h" @ONLY) | ||||
|  | ||||
| add_subdirectory(src) | ||||
| add_subdirectory(dist) | ||||
|  | ||||
| if (TESTING) | ||||
|     add_subdirectory(test) | ||||
| endif() | ||||
|   | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user