You've already forked qBittorrent
mirror of
https://github.com/qbittorrent/qBittorrent
synced 2025-10-14 11:52:15 +02:00
Compare commits
1399 Commits
release-4.
...
release-5.
Author | SHA1 | Date | |
---|---|---|---|
![]() |
cce295faeb | ||
![]() |
db5479ea01 | ||
![]() |
e1216c4c9a | ||
![]() |
f4a0868426 | ||
![]() |
59a5fcf7d0 | ||
![]() |
f9a2b02a8d | ||
![]() |
04f6a565f3 | ||
![]() |
3e96048ee4 | ||
![]() |
d4ccf3001c | ||
![]() |
64506f16bd | ||
![]() |
24a7a835af | ||
![]() |
93b9bf9552 | ||
![]() |
f4125601de | ||
![]() |
2d67729617 | ||
![]() |
878ebbed41 | ||
![]() |
c61c3d7cd8 | ||
![]() |
978fbbdc0d | ||
![]() |
63689cf763 | ||
![]() |
cebc72d3cf | ||
![]() |
a67bd271c6 | ||
![]() |
a8cffbb205 | ||
![]() |
7dfb0110d4 | ||
![]() |
3ad8fcbdd2 | ||
![]() |
195eae5f3d | ||
![]() |
920ae26f7b | ||
![]() |
09ed0d6b66 | ||
![]() |
4f0cc8aa11 | ||
![]() |
4d490c84e7 | ||
![]() |
96607ce874 | ||
![]() |
418edc7471 | ||
![]() |
bd01b7c4df | ||
![]() |
b0ac763048 | ||
![]() |
127d2d6f0b | ||
![]() |
4149609e78 | ||
![]() |
78c549f83e | ||
![]() |
a3a53e2e0e | ||
![]() |
5aaa43e01d | ||
![]() |
86745d7b07 | ||
![]() |
210650a5ee | ||
![]() |
fe93b6d0d8 | ||
![]() |
e8b585acd8 | ||
![]() |
cea20141a9 | ||
![]() |
0f5a27ed50 | ||
![]() |
c2cf898ccd | ||
![]() |
5e5aa8a563 | ||
![]() |
12a4c3fda2 | ||
![]() |
5f50b701d2 | ||
![]() |
9f20d9c3aa | ||
![]() |
05e3130baa | ||
![]() |
683492648f | ||
![]() |
2f2e158877 | ||
![]() |
e60e96cb0e | ||
![]() |
5f31208bf1 | ||
![]() |
fa58e58e70 | ||
![]() |
671943a9a6 | ||
![]() |
8bad80bcdd | ||
![]() |
c44e300507 | ||
![]() |
318a677e8f | ||
![]() |
0246df790a | ||
![]() |
782fbc1425 | ||
![]() |
7deccd5592 | ||
![]() |
4a36fe7278 | ||
![]() |
1c5af96ad8 | ||
![]() |
3bb47a5410 | ||
![]() |
d7abeb4bf0 | ||
![]() |
a19d623ead | ||
![]() |
1ef21bc2b7 | ||
![]() |
4687b4e8e4 | ||
![]() |
d2e5163861 | ||
![]() |
8a15ea8026 | ||
![]() |
2b99554813 | ||
![]() |
e6638f9c19 | ||
![]() |
ec6eac2ba1 | ||
![]() |
a126a7b493 | ||
![]() |
b8a774f1fb | ||
![]() |
e09a871ca3 | ||
![]() |
04154ebb76 | ||
![]() |
fb796ec595 | ||
![]() |
00ca209ab9 | ||
![]() |
4d8713ce11 | ||
![]() |
2c47f09d7a | ||
![]() |
a19ef58400 | ||
![]() |
21a4ab6bac | ||
![]() |
2b728b3bc0 | ||
![]() |
6231208ddf | ||
![]() |
e2d6cd31b2 | ||
![]() |
79eb7b8e38 | ||
![]() |
8ef7d3ec9a | ||
![]() |
05416458db | ||
![]() |
cd3982cf3c | ||
![]() |
a1af077889 | ||
![]() |
42b87963fd | ||
![]() |
775b38079f | ||
![]() |
d65d8558d6 | ||
![]() |
b1175b60e1 | ||
![]() |
d3315f7cc7 | ||
![]() |
321d7e5b17 | ||
![]() |
4ac586c896 | ||
![]() |
ca71c186e0 | ||
![]() |
ddb0ff29e2 | ||
![]() |
6c57fad0cd | ||
![]() |
1c7ecb7371 | ||
![]() |
4945ed576a | ||
![]() |
c6f4e95b7d | ||
![]() |
fc3953dbaa | ||
![]() |
75e2ae2fa0 | ||
![]() |
7310eec74e | ||
![]() |
3e0fd01604 | ||
![]() |
ace5286402 | ||
![]() |
d7cded54e4 | ||
![]() |
6c82d5e305 | ||
![]() |
c036313adf | ||
![]() |
29f0adf215 | ||
![]() |
e697d40382 | ||
![]() |
01cc4ea90b | ||
![]() |
d407e954d1 | ||
![]() |
f085f8c076 | ||
![]() |
92ce507151 | ||
![]() |
67dfce7437 | ||
![]() |
e4aad461c7 | ||
![]() |
f37d0c486c | ||
![]() |
8e6515be2c | ||
![]() |
1d221c22e4 | ||
![]() |
2fe91a6c8f | ||
![]() |
90383567b2 | ||
![]() |
4967f977c5 | ||
![]() |
eb9e98a4b3 | ||
![]() |
f5cac13979 | ||
![]() |
f20467889d | ||
![]() |
5e8b9df859 | ||
![]() |
489bacd766 | ||
![]() |
5d1c249606 | ||
![]() |
f2d6129db3 | ||
![]() |
5c67c5a77d | ||
![]() |
ce013f132f | ||
![]() |
abcf1e076e | ||
![]() |
47c38e8d91 | ||
![]() |
34d19e5714 | ||
![]() |
25b7972f88 | ||
![]() |
845f9a821e | ||
![]() |
b489262f51 | ||
![]() |
a5681f72bc | ||
![]() |
9e569f1a70 | ||
![]() |
9d3c314ac0 | ||
![]() |
931de85ab5 | ||
![]() |
6a82cb1af6 | ||
![]() |
f8ae8f419d | ||
![]() |
ac91c1348b | ||
![]() |
d7aaf80744 | ||
![]() |
50caa231f7 | ||
![]() |
d5e41bf679 | ||
![]() |
773cb1e55d | ||
![]() |
0967bdc715 | ||
![]() |
c06817f4eb | ||
![]() |
1702b6c891 | ||
![]() |
f65af03c67 | ||
![]() |
a567f8b600 | ||
![]() |
71f1e6df59 | ||
![]() |
896f5fe729 | ||
![]() |
8a1bc8e5fd | ||
![]() |
6964132475 | ||
![]() |
f265eb0166 | ||
![]() |
0114610a40 | ||
![]() |
15697f904d | ||
![]() |
46e8ee50c8 | ||
![]() |
364bcf73ee | ||
![]() |
031fa6183c | ||
![]() |
66c34ddb6e | ||
![]() |
3f2b4afc21 | ||
![]() |
e1fa7e01c6 | ||
![]() |
9192c988ed | ||
![]() |
cffd74b62a | ||
![]() |
c6ee0ff017 | ||
![]() |
dc501c39be | ||
![]() |
7786e1b084 | ||
![]() |
80dea08328 | ||
![]() |
bb8a012b1c | ||
![]() |
63c9b6388e | ||
![]() |
3d24a4e0f7 | ||
![]() |
f04edd555f | ||
![]() |
e31b553807 | ||
![]() |
a9741bb203 | ||
![]() |
67e0a2de44 | ||
![]() |
1afb3ff433 | ||
![]() |
16a91f26fb | ||
![]() |
963a7faab8 | ||
![]() |
d06d5b923a | ||
![]() |
6d68ab4dae | ||
![]() |
60bb819e2e | ||
![]() |
8ef99b336c | ||
![]() |
f7e9ff0fb0 | ||
![]() |
9b64d50660 | ||
![]() |
5fe5c333b5 | ||
![]() |
49f819ef78 | ||
![]() |
2755190d8e | ||
![]() |
f87ea1b5d3 | ||
![]() |
88a4990435 | ||
![]() |
9bfb447dd3 | ||
![]() |
d652a10495 | ||
![]() |
df41940ebc | ||
![]() |
94e80d01a8 | ||
![]() |
bab9c15913 | ||
![]() |
31d456c43b | ||
![]() |
c5d7b62473 | ||
![]() |
8ec3db1807 | ||
![]() |
05572a7317 | ||
![]() |
00372dd559 | ||
![]() |
6918316a3d | ||
![]() |
2edb1a0765 | ||
![]() |
582e4dcb59 | ||
![]() |
14513d051d | ||
![]() |
97c0abcbf0 | ||
![]() |
ad22237a2f | ||
![]() |
8bdb83d973 | ||
![]() |
54bcabeca4 | ||
![]() |
114652205c | ||
![]() |
5b3b56c918 | ||
![]() |
e69f857828 | ||
![]() |
0b6d785e87 | ||
![]() |
f3d45327e1 | ||
![]() |
9bf7f3b181 | ||
![]() |
d5bf0358cb | ||
![]() |
fc56fdade7 | ||
![]() |
293a2efca7 | ||
![]() |
8bd604f633 | ||
![]() |
fcd16d56e2 | ||
![]() |
be5bf9a138 | ||
![]() |
8dcc734df5 | ||
![]() |
4057972b2d | ||
![]() |
073ca4267c | ||
![]() |
9d90141c29 | ||
![]() |
cc563d9f78 | ||
![]() |
88ef8a51dd | ||
![]() |
0297f0f34b | ||
![]() |
7a41192597 | ||
![]() |
65771d66fc | ||
![]() |
0dbac78e17 | ||
![]() |
608efc77e8 | ||
![]() |
9ecb3874d8 | ||
![]() |
4ba8eaf4b4 | ||
![]() |
bfd3ce2fca | ||
![]() |
86d5d13ce6 | ||
![]() |
8f230bc2e6 | ||
![]() |
6d0ad62632 | ||
![]() |
c165131c3f | ||
![]() |
9fde5634f1 | ||
![]() |
19b88b7f4a | ||
![]() |
60eaff9fcb | ||
![]() |
c3adc90f7e | ||
![]() |
6f7f418ec1 | ||
![]() |
137df132e8 | ||
![]() |
b2c51a5b9e | ||
![]() |
e99a012bb4 | ||
![]() |
75feacb213 | ||
![]() |
ce34245aaf | ||
![]() |
ef06be63bf | ||
![]() |
a1c78a0455 | ||
![]() |
32fbacf615 | ||
![]() |
75c638e2f8 | ||
![]() |
298e4ba852 | ||
![]() |
50680a3d9b | ||
![]() |
20bfd392ff | ||
![]() |
8cc8ffabb0 | ||
![]() |
2a20764d39 | ||
![]() |
9d6d3a30eb | ||
![]() |
b67da4bebe | ||
![]() |
8e39ac7efd | ||
![]() |
fb497f3410 | ||
![]() |
5d1d3fcf57 | ||
![]() |
0f40fad74d | ||
![]() |
28b5d7230c | ||
![]() |
c88bd7cb3f | ||
![]() |
30d9978c97 | ||
![]() |
f067ab1692 | ||
![]() |
bcfa251290 | ||
![]() |
f49507cb58 | ||
![]() |
606c23d1a4 | ||
![]() |
7c0e3baf5f | ||
![]() |
6cfbc02d8f | ||
![]() |
794cce38f3 | ||
![]() |
f20f009b78 | ||
![]() |
e216a9cf53 | ||
![]() |
7f57324655 | ||
![]() |
0186f44bf4 | ||
![]() |
6b53c57157 | ||
![]() |
5db2c2c2be | ||
![]() |
cecbb44a03 | ||
![]() |
4a20a1660e | ||
![]() |
eddfaedc4d | ||
![]() |
e42d3f38cc | ||
![]() |
e7f38ec6ce | ||
![]() |
a689ccf798 | ||
![]() |
7bd8f262db | ||
![]() |
98576dacae | ||
![]() |
b4642ca9d3 | ||
![]() |
9b924c1931 | ||
![]() |
de2ba53f08 | ||
![]() |
031be41491 | ||
![]() |
c671b7059e | ||
![]() |
347124812e | ||
![]() |
bf95eb50da | ||
![]() |
ee9390fecd | ||
![]() |
12674d2990 | ||
![]() |
35e4b35d12 | ||
![]() |
6860c0d60d | ||
![]() |
9de32a78f1 | ||
![]() |
8d5022c715 | ||
![]() |
921be09d8f | ||
![]() |
116b05009d | ||
![]() |
63499511cb | ||
![]() |
413e7dd3c4 | ||
![]() |
cba433823f | ||
![]() |
90e023f138 | ||
![]() |
e6ec3d0c2b | ||
![]() |
d60f9c6142 | ||
![]() |
a3888811f6 | ||
![]() |
30189ae943 | ||
![]() |
ec90d169c0 | ||
![]() |
3ca0939411 | ||
![]() |
34f7b75f12 | ||
![]() |
c051ee9409 | ||
![]() |
70b438e6d9 | ||
![]() |
73028f9930 | ||
![]() |
bda18ad29b | ||
![]() |
0404ff9fb3 | ||
![]() |
47439a7efd | ||
![]() |
16111496ca | ||
![]() |
43e9403a4c | ||
![]() |
7ab90cfc40 | ||
![]() |
b3fda76027 | ||
![]() |
529e49aea7 | ||
![]() |
46c1c9de65 | ||
![]() |
cacae42e5e | ||
![]() |
f3b688217e | ||
![]() |
5e5c6aa7d8 | ||
![]() |
88d32d57ab | ||
![]() |
1537f1e703 | ||
![]() |
30badbf36e | ||
![]() |
5a334175a8 | ||
![]() |
dcba9eda00 | ||
![]() |
633167a6da | ||
![]() |
c394868f87 | ||
![]() |
2deb7eb3d9 | ||
![]() |
d19f4c2e1f | ||
![]() |
22f63468a2 | ||
![]() |
479639162d | ||
![]() |
5b57abc7d8 | ||
![]() |
d841dda654 | ||
![]() |
4cf933b4fc | ||
![]() |
7cd2445a49 | ||
![]() |
2f94c92df9 | ||
![]() |
39efd0e9ff | ||
![]() |
ff80e0ce66 | ||
![]() |
65930ddf94 | ||
![]() |
4d2015cfed | ||
![]() |
2dc1a7d66f | ||
![]() |
145971b915 | ||
![]() |
43e3d0b4b2 | ||
![]() |
0fdb1b3f53 | ||
![]() |
24da51ffa0 | ||
![]() |
e434812cda | ||
![]() |
9a1df0c595 | ||
![]() |
44763d3e15 | ||
![]() |
9a73a21f3f | ||
![]() |
e045b4678d | ||
![]() |
d8a03cd8d8 | ||
![]() |
270c63d64c | ||
![]() |
bbac94cc95 | ||
![]() |
9ab8203c8a | ||
![]() |
c805606524 | ||
![]() |
34d30ed031 | ||
![]() |
f3f4610ba4 | ||
![]() |
21b77cb4f8 | ||
![]() |
dcf3e97291 | ||
![]() |
e4313d6651 | ||
![]() |
52fbb774a2 | ||
![]() |
a0e41a11de | ||
![]() |
cab5edb721 | ||
![]() |
7a9a102b6f | ||
![]() |
6ba561dea2 | ||
![]() |
56ba5e5182 | ||
![]() |
69d60b5f1c | ||
![]() |
850da9dd83 | ||
![]() |
502b3d3228 | ||
![]() |
c25d14b1d0 | ||
![]() |
31fe327763 | ||
![]() |
870bcc7a19 | ||
![]() |
44f0a63354 | ||
![]() |
9fa48a375d | ||
![]() |
f2b4aa6570 | ||
![]() |
5c06d0aa75 | ||
![]() |
4d98761e99 | ||
![]() |
180e708f3c | ||
![]() |
da4f2c2439 | ||
![]() |
33d767b765 | ||
![]() |
06581636a1 | ||
![]() |
a0fa1709d5 | ||
![]() |
699dc1689a | ||
![]() |
a427b9228d | ||
![]() |
c4ed40b82f | ||
![]() |
e68cf87f05 | ||
![]() |
fccdeb4e78 | ||
![]() |
431860482c | ||
![]() |
d554db4f4e | ||
![]() |
6c16a09385 | ||
![]() |
b35c2bca5d | ||
![]() |
852927bf50 | ||
![]() |
a5a4ea9ba0 | ||
![]() |
45ca5d31c9 | ||
![]() |
b14740aeac | ||
![]() |
5b0706df65 | ||
![]() |
11efd26acc | ||
![]() |
006ad23d0d | ||
![]() |
9975230dea | ||
![]() |
e31c3376bd | ||
![]() |
9898901236 | ||
![]() |
56c52af124 | ||
![]() |
c20a77aa77 | ||
![]() |
d6adebe4c0 | ||
![]() |
c58aa58cba | ||
![]() |
7612d5d0ef | ||
![]() |
1874fd7f93 | ||
![]() |
0bcc1cf4a0 | ||
![]() |
cffcf5783f | ||
![]() |
10ee1ab7a2 | ||
![]() |
f27f2c20e0 | ||
![]() |
d554f4d44a | ||
![]() |
d357cdd5f9 | ||
![]() |
0f862fcf9f | ||
![]() |
6bd56478fd | ||
![]() |
76b5ca6b8b | ||
![]() |
dbb1b1e9bb | ||
![]() |
b5fbfdf106 | ||
![]() |
f3f9cfe44e | ||
![]() |
dbe79484d2 | ||
![]() |
5e610cfdcf | ||
![]() |
2c08dc9dad | ||
![]() |
15b46259f3 | ||
![]() |
d569eaa991 | ||
![]() |
64c3845a7c | ||
![]() |
79afa0b84d | ||
![]() |
38d773ca46 | ||
![]() |
9194f60ac0 | ||
![]() |
4a217dc42f | ||
![]() |
9171b73edb | ||
![]() |
0f0de5e4f8 | ||
![]() |
c1d64cc3ea | ||
![]() |
57085ca126 | ||
![]() |
7b4b7c2b81 | ||
![]() |
6a3a5fac83 | ||
![]() |
35e18498d9 | ||
![]() |
f99a98306d | ||
![]() |
b0cfe53329 | ||
![]() |
060466e326 | ||
![]() |
392949b313 | ||
![]() |
b17307f283 | ||
![]() |
e739d38061 | ||
![]() |
20f4d0c4e3 | ||
![]() |
4f6038c350 | ||
![]() |
f08556be30 | ||
![]() |
543745b3f2 | ||
![]() |
cb0c09769f | ||
![]() |
e8f5a3b44e | ||
![]() |
5a660fc8a9 | ||
![]() |
488464731d | ||
![]() |
fb68604ee7 | ||
![]() |
4ef9a6444a | ||
![]() |
66dfe8545d | ||
![]() |
fff7b1dcbd | ||
![]() |
b5b1f51cee | ||
![]() |
33875aa70a | ||
![]() |
9d7dad4a61 | ||
![]() |
213b6e316c | ||
![]() |
ffc3d8d345 | ||
![]() |
7ec80263e1 | ||
![]() |
66e533f505 | ||
![]() |
045b4f0a06 | ||
![]() |
80c637bf99 | ||
![]() |
48d5e3326b | ||
![]() |
80791e328d | ||
![]() |
08a771468d | ||
![]() |
c3fc96dfe6 | ||
![]() |
715a4f3eb6 | ||
![]() |
8655e48336 | ||
![]() |
3c139ca333 | ||
![]() |
f4deb1050f | ||
![]() |
889ed5bce9 | ||
![]() |
6680fdda18 | ||
![]() |
88bd4f270f | ||
![]() |
86a5ad3241 | ||
![]() |
1c654d8f47 | ||
![]() |
c90863f217 | ||
![]() |
deec2ae1b1 | ||
![]() |
f37fff31ae | ||
![]() |
dffb93a6aa | ||
![]() |
3b948b0130 | ||
![]() |
b3d2ba7d07 | ||
![]() |
03d3552ee0 | ||
![]() |
379b0dbe40 | ||
![]() |
f213f81727 | ||
![]() |
1f2a6455b6 | ||
![]() |
fc8c74989b | ||
![]() |
b01a48879a | ||
![]() |
e780b3a9b7 | ||
![]() |
2bbfd317ce | ||
![]() |
e6d85a468b | ||
![]() |
f6b58f36e2 | ||
![]() |
79ca2e145f | ||
![]() |
81bc910d68 | ||
![]() |
ff5d02bcf2 | ||
![]() |
2e87e6e0df | ||
![]() |
a5e8af5070 | ||
![]() |
cf415dd7fe | ||
![]() |
83e6afcb71 | ||
![]() |
62d96c068a | ||
![]() |
040c3c7ef8 | ||
![]() |
3ef8726083 | ||
![]() |
dad9157d84 | ||
![]() |
5cea69472f | ||
![]() |
b1492bcd7d | ||
![]() |
d571ab2be1 | ||
![]() |
4550469bb9 | ||
![]() |
160af4feef | ||
![]() |
b27e839405 | ||
![]() |
ecc08dee09 | ||
![]() |
11ac4e7620 | ||
![]() |
fbe93f0c47 | ||
![]() |
11945eef3f | ||
![]() |
a35dbc6df7 | ||
![]() |
3fb4e4d293 | ||
![]() |
f5a4065101 | ||
![]() |
ba93d55a6d | ||
![]() |
a59301712e | ||
![]() |
b406d669b3 | ||
![]() |
4ef8f39f23 | ||
![]() |
34802362ad | ||
![]() |
c10f1f0ad2 | ||
![]() |
58ae98026b | ||
![]() |
32a55551fe | ||
![]() |
7880fe8440 | ||
![]() |
bb959bda8c | ||
![]() |
d629c77184 | ||
![]() |
b953d223e4 | ||
![]() |
6fa53b5ed8 | ||
![]() |
c777ed3299 | ||
![]() |
341b2f345a | ||
![]() |
905f141657 | ||
![]() |
0a87bb368f | ||
![]() |
93a1e58554 | ||
![]() |
0cc29f1851 | ||
![]() |
81daad92ec | ||
![]() |
41be7e9bbe | ||
![]() |
179a61d75e | ||
![]() |
73134d5f4d | ||
![]() |
29c05ed3e8 | ||
![]() |
e375f3ee0b | ||
![]() |
b185153254 | ||
![]() |
e7e5c38384 | ||
![]() |
9a00839a75 | ||
![]() |
79e85d01fa | ||
![]() |
e408973ee6 | ||
![]() |
8c9b6e2f2d | ||
![]() |
5b43782f58 | ||
![]() |
2059825597 | ||
![]() |
e1be46820b | ||
![]() |
8219b1f695 | ||
![]() |
3fbe380582 | ||
![]() |
5f00d42a49 | ||
![]() |
15de7aed9a | ||
![]() |
5c38cc00d9 | ||
![]() |
5a1dcbae9c | ||
![]() |
7c6a852f85 | ||
![]() |
147b22ddd3 | ||
![]() |
d83b2a6131 | ||
![]() |
821e946bbe | ||
![]() |
634eb4a183 | ||
![]() |
758ea7edca | ||
![]() |
1bd499565e | ||
![]() |
be9ec5a329 | ||
![]() |
df895cb2a7 | ||
![]() |
3b72859980 | ||
![]() |
69df85f564 | ||
![]() |
1f1da32371 | ||
![]() |
cddf8c199c | ||
![]() |
bbd5ed1142 | ||
![]() |
0f033ec9c8 | ||
![]() |
7397c80837 | ||
![]() |
51132c817b | ||
![]() |
1fe006d16f | ||
![]() |
bd31eddb94 | ||
![]() |
0defb7d79d | ||
![]() |
1e400df324 | ||
![]() |
9ea48539b4 | ||
![]() |
d63e0ad78f | ||
![]() |
eaee38a19e | ||
![]() |
b3e9c46eff | ||
![]() |
5dcc14153f | ||
![]() |
4a66d705b8 | ||
![]() |
9d7fcea5d6 | ||
![]() |
b8cd614775 | ||
![]() |
a9ab2d9b9e | ||
![]() |
cecf2d28e6 | ||
![]() |
a01f1014b9 | ||
![]() |
77411760a0 | ||
![]() |
0dcb65bb7c | ||
![]() |
d40be79c69 | ||
![]() |
b55d4b1733 | ||
![]() |
40e28930a4 | ||
![]() |
5a3579a3f9 | ||
![]() |
9de8abadb6 | ||
![]() |
05c5cdab96 | ||
![]() |
1e1c1725ab | ||
![]() |
b5c57af869 | ||
![]() |
eb875ac8c1 | ||
![]() |
a36358d7d0 | ||
![]() |
679e592a5c | ||
![]() |
b922441a7c | ||
![]() |
941c587c68 | ||
![]() |
77bd09bb8b | ||
![]() |
8bcac1bed2 | ||
![]() |
cdded6cef7 | ||
![]() |
8cbe4a571c | ||
![]() |
ee9d2173e0 | ||
![]() |
a450a7c6e1 | ||
![]() |
d41a77841d | ||
![]() |
ae06daba6a | ||
![]() |
77aa85fbd3 | ||
![]() |
989b1e6c2c | ||
![]() |
9ef23d524d | ||
![]() |
f16e903623 | ||
![]() |
0bb0829a9a | ||
![]() |
fa30b70453 | ||
![]() |
e4f90730b2 | ||
![]() |
6fd522472c | ||
![]() |
0f32de9d8c | ||
![]() |
f630d84858 | ||
![]() |
ee6f699b48 | ||
![]() |
ce9bdaef5c | ||
![]() |
37c04fdeed | ||
![]() |
c51aa2d573 | ||
![]() |
b922e1ae73 | ||
![]() |
dd48f62d66 | ||
![]() |
f5b5312cf0 | ||
![]() |
58a654a70f | ||
![]() |
ff0f3b4975 | ||
![]() |
8df68ac878 | ||
![]() |
2f9b313287 | ||
![]() |
cbf591a8b5 | ||
![]() |
96da685e5d | ||
![]() |
6ac14d0c57 | ||
![]() |
4745a40f0b | ||
![]() |
8993d87b32 | ||
![]() |
8df80b67f9 | ||
![]() |
466314675c | ||
![]() |
d75fd3fcde | ||
![]() |
7ae83df5a5 | ||
![]() |
19f55512c1 | ||
![]() |
6e25db444e | ||
![]() |
d2c4b69f47 | ||
![]() |
4170b4e21b | ||
![]() |
9fb9ca47f6 | ||
![]() |
917190d936 | ||
![]() |
1e913f46f0 | ||
![]() |
4c0ebc0e0f | ||
![]() |
1b0f5b8567 | ||
![]() |
6a4bb5c1b7 | ||
![]() |
3fea9f5a33 | ||
![]() |
7600f59f3a | ||
![]() |
915121a0dd | ||
![]() |
1be5b3abd8 | ||
![]() |
e37661d53a | ||
![]() |
d06f78dbbd | ||
![]() |
5d4766edbe | ||
![]() |
72ac92ec68 | ||
![]() |
22ea508ff6 | ||
![]() |
b2213ded6d | ||
![]() |
1ea2fe5b8d | ||
![]() |
7227d2b2b2 | ||
![]() |
0dcbf9f698 | ||
![]() |
09e58df03f | ||
![]() |
d256db5072 | ||
![]() |
10153f0063 | ||
![]() |
c6a1b977b3 | ||
![]() |
870bb42e4f | ||
![]() |
b61c7b7220 | ||
![]() |
c58fb92365 | ||
![]() |
5e952a561b | ||
![]() |
ca72360b6f | ||
![]() |
630b4ed3b9 | ||
![]() |
cba9680ef9 | ||
![]() |
2310dcd136 | ||
![]() |
ee00a80796 | ||
![]() |
051bac5e59 | ||
![]() |
771c58d000 | ||
![]() |
53cec6db09 | ||
![]() |
43e059801e | ||
![]() |
ce35a06ec3 | ||
![]() |
32e4371208 | ||
![]() |
0d376e7fd6 | ||
![]() |
2b20d5b260 | ||
![]() |
719e4afd8c | ||
![]() |
9cdf660ddb | ||
![]() |
5dbccf3473 | ||
![]() |
8db2d04dbb | ||
![]() |
209850064a | ||
![]() |
e628b7d527 | ||
![]() |
61dbb211c0 | ||
![]() |
71f4a5667c | ||
![]() |
b33dc7d831 | ||
![]() |
c5a4a0db2c | ||
![]() |
b9e045e80b | ||
![]() |
cfd0c5433e | ||
![]() |
ebad387c1a | ||
![]() |
3f39bd9f35 | ||
![]() |
f8236eb397 | ||
![]() |
23a56c95e3 | ||
![]() |
6f8aa07a10 | ||
![]() |
594f9e8632 | ||
![]() |
aeae065007 | ||
![]() |
b12fdcf018 | ||
![]() |
84fabf14c8 | ||
![]() |
0ec47db9cd | ||
![]() |
3cf0004665 | ||
![]() |
40258f6a2f | ||
![]() |
b335114219 | ||
![]() |
998b08f5d8 | ||
![]() |
991c30943a | ||
![]() |
ad2be39c33 | ||
![]() |
c3936cd4b6 | ||
![]() |
d2e595aac3 | ||
![]() |
b8aa9e5609 | ||
![]() |
2109c4e1ae | ||
![]() |
ac3ad17a9e | ||
![]() |
31c7306bd2 | ||
![]() |
4741aab7a3 | ||
![]() |
679e3b8bea | ||
![]() |
25ea0d274b | ||
![]() |
12b58be8c2 | ||
![]() |
e4f1485c82 | ||
![]() |
1b2ff0f6f8 | ||
![]() |
a31755bbc8 | ||
![]() |
311e0f21eb | ||
![]() |
b86366f243 | ||
![]() |
58d1c80b12 | ||
![]() |
182915f801 | ||
![]() |
50c08e55cd | ||
![]() |
4307a09621 | ||
![]() |
d531d6d221 | ||
![]() |
4cf94a6fa0 | ||
![]() |
4cb60f4870 | ||
![]() |
d82edb2838 | ||
![]() |
c91eefe469 | ||
![]() |
327affa340 | ||
![]() |
4e7c2589e4 | ||
![]() |
17ce07230d | ||
![]() |
fda6c9a3d9 | ||
![]() |
92af2922c7 | ||
![]() |
1cee69da6c | ||
![]() |
f54b66eb75 | ||
![]() |
3563bad5fc | ||
![]() |
1f3f96f7aa | ||
![]() |
7022adb89b | ||
![]() |
bac57de5f5 | ||
![]() |
bdd56a52d3 | ||
![]() |
dcdbd02102 | ||
![]() |
b68c4e2106 | ||
![]() |
67cb75e9d3 | ||
![]() |
f9eefe866c | ||
![]() |
c636618cf3 | ||
![]() |
0f82c16936 | ||
![]() |
d328eeb5be | ||
![]() |
d90ea0d3be | ||
![]() |
e7ece66717 | ||
![]() |
6c9c40fd7c | ||
![]() |
529c1ec9f4 | ||
![]() |
93429840c8 | ||
![]() |
6aee7f95b7 | ||
![]() |
0b70ccf9e9 | ||
![]() |
da586828be | ||
![]() |
2e4431f0b8 | ||
![]() |
162273da47 | ||
![]() |
22fb9797c4 | ||
![]() |
f6735401f4 | ||
![]() |
06c4c58613 | ||
![]() |
c80238d66f | ||
![]() |
6a560016dd | ||
![]() |
99b7663fa9 | ||
![]() |
be0f34a69e | ||
![]() |
3a2e73cc94 | ||
![]() |
3ee0457cfa | ||
![]() |
e19173c1f3 | ||
![]() |
4a5d2e2558 | ||
![]() |
027d6be48f | ||
![]() |
0f2cc92ba2 | ||
![]() |
07bb1df74f | ||
![]() |
c29a6079bf | ||
![]() |
dfb56ce31c | ||
![]() |
5a8027ae1f | ||
![]() |
bb2caabd61 | ||
![]() |
14e4bc7eea | ||
![]() |
9fb8f765e8 | ||
![]() |
fe0be98fde | ||
![]() |
fdba525e62 | ||
![]() |
dfdaa706bd | ||
![]() |
1a782a9362 | ||
![]() |
5f2d807861 | ||
![]() |
f2dd1e6456 | ||
![]() |
155e73df16 | ||
![]() |
05b7194bf7 | ||
![]() |
597444c527 | ||
![]() |
1c2dc79f51 | ||
![]() |
106adf135c | ||
![]() |
dcfd367ff8 | ||
![]() |
67ee43fac1 | ||
![]() |
a325ab8d6e | ||
![]() |
c94152c47c | ||
![]() |
a44bca3f07 | ||
![]() |
698284f00e | ||
![]() |
3b9d68f344 | ||
![]() |
e028d8085b | ||
![]() |
af1c97e2ea | ||
![]() |
b95d97d07b | ||
![]() |
17a5bd03c5 | ||
![]() |
ada594faf3 | ||
![]() |
4f0990dc29 | ||
![]() |
f66ec4430d | ||
![]() |
67357e9964 | ||
![]() |
7eb97348de | ||
![]() |
0279b80b46 | ||
![]() |
d3936c07c7 | ||
![]() |
aa022400f7 | ||
![]() |
66795d533a | ||
![]() |
ce7d8dee28 | ||
![]() |
1f799689ed | ||
![]() |
3463442631 | ||
![]() |
c35ca52b00 | ||
![]() |
6d501c2e6e | ||
![]() |
a71d7e6557 | ||
![]() |
30c2f9d9f3 | ||
![]() |
544f9675c6 | ||
![]() |
0c76321a6a | ||
![]() |
10349b84d6 | ||
![]() |
6fa4305aba | ||
![]() |
d9af207a11 | ||
![]() |
ad59eb4dfc | ||
![]() |
874b015b20 | ||
![]() |
21aabfdcb5 | ||
![]() |
e7370d1a0f | ||
![]() |
855f727451 | ||
![]() |
3b0ac0962e | ||
![]() |
617dedc464 | ||
![]() |
8b4a0da235 | ||
![]() |
dcc5206e3d | ||
![]() |
9a81cbf4c0 | ||
![]() |
d96ed5f4a4 | ||
![]() |
102b6c32eb | ||
![]() |
2af1e1874e | ||
![]() |
680455a21b | ||
![]() |
b568cdb1aa | ||
![]() |
bc0d906adc | ||
![]() |
2b385e5f92 | ||
![]() |
616057a433 | ||
![]() |
9a20aa51de | ||
![]() |
6c8b31420c | ||
![]() |
0514cb304d | ||
![]() |
0a4ee60ea0 | ||
![]() |
caa30e41d8 | ||
![]() |
dc76a175ad | ||
![]() |
92768c36aa | ||
![]() |
2a3a4bff70 | ||
![]() |
cacfe4f3ca | ||
![]() |
37150520e1 | ||
![]() |
3aadb63d80 | ||
![]() |
0e0b8d1027 | ||
![]() |
5e4a94e6b6 | ||
![]() |
db7850e218 | ||
![]() |
1dcfd7bb59 | ||
![]() |
b28704a6ec | ||
![]() |
0c6e56a150 | ||
![]() |
d71ff734a9 | ||
![]() |
90652d3555 | ||
![]() |
f8a2fbc4c5 | ||
![]() |
80759f9e69 | ||
![]() |
e692a191ed | ||
![]() |
4e06a9629a | ||
![]() |
b3334e5fac | ||
![]() |
4e326229da | ||
![]() |
021222b407 | ||
![]() |
6c60fa5161 | ||
![]() |
cd405ffc32 | ||
![]() |
537b1c1ea9 | ||
![]() |
257914b0d5 | ||
![]() |
5cfaaa5d1a | ||
![]() |
109c45bb95 | ||
![]() |
851374e517 | ||
![]() |
4094a4c448 | ||
![]() |
987e1b544a | ||
![]() |
5cf6b1cbde | ||
![]() |
4318de6dc5 | ||
![]() |
459d1cf82c | ||
![]() |
48d52d9ab7 | ||
![]() |
16a99e687f | ||
![]() |
fb37b0c147 | ||
![]() |
9877ff330e | ||
![]() |
6f88609d60 | ||
![]() |
6263c4786b | ||
![]() |
3061f6cf5b | ||
![]() |
cc8c1a5748 | ||
![]() |
ca897a8a35 | ||
![]() |
77dd8bd27b | ||
![]() |
fe34749cfe | ||
![]() |
646322b2a2 | ||
![]() |
670b381df7 | ||
![]() |
ddf4b94bc6 | ||
![]() |
794a92f911 | ||
![]() |
f6e2715f4a | ||
![]() |
082e6f8830 | ||
![]() |
ee38124db7 | ||
![]() |
e06e1d9911 | ||
![]() |
3851e76179 | ||
![]() |
d693f97a46 | ||
![]() |
ca274635d5 | ||
![]() |
525692759d | ||
![]() |
e5491645e4 | ||
![]() |
9f511a47e8 | ||
![]() |
7b0644cdcd | ||
![]() |
7527343629 | ||
![]() |
d173216941 | ||
![]() |
d28b5f7834 | ||
![]() |
04f6ee79c3 | ||
![]() |
b046b40668 | ||
![]() |
0a289e15b4 | ||
![]() |
ce8b51e7ef | ||
![]() |
df5ea9b675 | ||
![]() |
ff7fe7c107 | ||
![]() |
ac6af55335 | ||
![]() |
001c3906b5 | ||
![]() |
0d5d6db0ee | ||
![]() |
72941b10bb | ||
![]() |
d6c92704a1 | ||
![]() |
ba511e07b4 | ||
![]() |
aa6b29fe7e | ||
![]() |
f5836c9fc9 | ||
![]() |
d7d1a90de6 | ||
![]() |
16482c507b | ||
![]() |
5abd72d42a | ||
![]() |
2fa5ad982d | ||
![]() |
43df7d0cd4 | ||
![]() |
17d40855d2 | ||
![]() |
c924fe7950 | ||
![]() |
908f345e22 | ||
![]() |
858eea1e9e | ||
![]() |
06c704c740 | ||
![]() |
916e53c260 | ||
![]() |
3f94a68e62 | ||
![]() |
5c96f16e3d | ||
![]() |
8e33d99901 | ||
![]() |
d27dd85dfd | ||
![]() |
15515200ee | ||
![]() |
7f40602da9 | ||
![]() |
33e6ca6778 | ||
![]() |
54b50c3a8a | ||
![]() |
fa3d98aa37 | ||
![]() |
e24aaa4ce1 | ||
![]() |
aed492b881 | ||
![]() |
a4c2363f43 | ||
![]() |
0056a61db3 | ||
![]() |
6d1573f901 | ||
![]() |
ef297dd8e6 | ||
![]() |
958929aa77 | ||
![]() |
1c0479a795 | ||
![]() |
748226be29 | ||
![]() |
27e1a8ad80 | ||
![]() |
0802b6d506 | ||
![]() |
29f8b4b786 | ||
![]() |
2ebdf6060d | ||
![]() |
b98e7cb69f | ||
![]() |
2071ec0c96 | ||
![]() |
36bc77e2e2 | ||
![]() |
88556078be | ||
![]() |
27a07e20f5 | ||
![]() |
5d1115f591 | ||
![]() |
88d9e82fc9 | ||
![]() |
50b01ed45d | ||
![]() |
243d130667 | ||
![]() |
e33f73d08e | ||
![]() |
f505d742d8 | ||
![]() |
727d20cc92 | ||
![]() |
3567ae3529 | ||
![]() |
a9906e5d2a | ||
![]() |
6ab35512da | ||
![]() |
cfcbe3d6e1 | ||
![]() |
39c0c1a088 | ||
![]() |
f7ae010274 | ||
![]() |
4fd5037c10 | ||
![]() |
3fe09aa673 | ||
![]() |
3a6858a277 | ||
![]() |
c287c7bb01 | ||
![]() |
99061d92c1 | ||
![]() |
5b269a782a | ||
![]() |
71e53a4628 | ||
![]() |
275387a972 | ||
![]() |
e68e3b516e | ||
![]() |
3f7376f26b | ||
![]() |
0e3ce019e4 | ||
![]() |
f20f479a4b | ||
![]() |
e95066a37c | ||
![]() |
e281b667c6 | ||
![]() |
ce0e92e12a | ||
![]() |
56bb379024 | ||
![]() |
bafe4e909c | ||
![]() |
b6b0b54cdb | ||
![]() |
a9a45b9569 | ||
![]() |
864d806ee8 | ||
![]() |
4cda5d89fb | ||
![]() |
5b730ffb72 | ||
![]() |
e2b140b8dd | ||
![]() |
d2a29c2f87 | ||
![]() |
60e62dc5ab | ||
![]() |
4f1684c714 | ||
![]() |
d3e7e8a630 | ||
![]() |
437ddd3f76 | ||
![]() |
0d715d879d | ||
![]() |
cfdf5cffac | ||
![]() |
d6314b30a2 | ||
![]() |
03da68b1cf | ||
![]() |
890630944d | ||
![]() |
8d73ab65b2 | ||
![]() |
e54124fdb8 | ||
![]() |
e4fafb911a | ||
![]() |
2ef059807a | ||
![]() |
dba711d099 | ||
![]() |
ec13bba4da | ||
![]() |
8736c9ec4c | ||
![]() |
286df8f560 | ||
![]() |
92afbd45e8 | ||
![]() |
d293c22a52 | ||
![]() |
c660c9df8e | ||
![]() |
ed2eadaf56 | ||
![]() |
fa26333a5b | ||
![]() |
be7cfb78de | ||
![]() |
ec1d2cba40 | ||
![]() |
a93cd20e4d | ||
![]() |
25b3f2d1a6 | ||
![]() |
b44bdd21cb | ||
![]() |
53ea1843ab | ||
![]() |
34091176d5 | ||
![]() |
ac8a6887b6 | ||
![]() |
cc0a0b56ed | ||
![]() |
0e989185ce | ||
![]() |
aadf961184 | ||
![]() |
1abeac8811 | ||
![]() |
f8a304abdc | ||
![]() |
41a38428fc | ||
![]() |
d3850cf98f | ||
![]() |
02d906d3ae | ||
![]() |
6de72ecc77 | ||
![]() |
2a5dbe840c | ||
![]() |
86b6bcc1d9 | ||
![]() |
3023cff2b5 | ||
![]() |
f3a4764a1d | ||
![]() |
0d46a108b8 | ||
![]() |
8114c11d58 | ||
![]() |
e3425cfa9e | ||
![]() |
af78344e5d | ||
![]() |
a2121f2483 | ||
![]() |
7d97905716 | ||
![]() |
61adfea196 | ||
![]() |
3dd616f6ff | ||
![]() |
d5e6d161f2 | ||
![]() |
d1515456bc | ||
![]() |
7faa8b7a02 | ||
![]() |
5b0cbf9eb1 | ||
![]() |
74db0576af | ||
![]() |
d0b13f0eb0 | ||
![]() |
29a964d5b7 | ||
![]() |
5e6174c087 | ||
![]() |
199d770e15 | ||
![]() |
c47e29c7c8 | ||
![]() |
fed969ed64 | ||
![]() |
9cb686a6b7 | ||
![]() |
eddeda7bab | ||
![]() |
ca07540675 | ||
![]() |
fb5f563537 | ||
![]() |
2f9c5cdb22 | ||
![]() |
fcf50820e8 | ||
![]() |
3fd0241abb | ||
![]() |
ab0c82965c | ||
![]() |
5173a56ebd | ||
![]() |
9cd993d1da | ||
![]() |
73faf67084 | ||
![]() |
fd51362545 | ||
![]() |
56b99f4e19 | ||
![]() |
63cdfa2d85 | ||
![]() |
242874e705 | ||
![]() |
a5caa807f5 | ||
![]() |
c2c17fd053 | ||
![]() |
f54cc5796e | ||
![]() |
a9f99aed48 | ||
![]() |
7eaaa8f92a | ||
![]() |
ca9f5a18d4 | ||
![]() |
4f62900cd3 | ||
![]() |
2c9e1d942b | ||
![]() |
4032393c0e | ||
![]() |
8e854062e8 | ||
![]() |
cbf9c8ec1a | ||
![]() |
494593c745 | ||
![]() |
3af832ec18 | ||
![]() |
7e0cd223fd | ||
![]() |
8c0cd09823 | ||
![]() |
f931fc5a85 | ||
![]() |
c8b4611d8d | ||
![]() |
7764169aa3 | ||
![]() |
567dd3fabb | ||
![]() |
8d3c19c599 | ||
![]() |
b84333f8a1 | ||
![]() |
acdd08e9a2 | ||
![]() |
dbfd6a2368 | ||
![]() |
5af96943e3 | ||
![]() |
05325b135d | ||
![]() |
9d858d5cd7 | ||
![]() |
e82c50ed73 | ||
![]() |
4ce98d57dd | ||
![]() |
114c6d36d1 | ||
![]() |
538c88ced4 | ||
![]() |
7c35904062 | ||
![]() |
5c3c6b63ba | ||
![]() |
e698c09298 | ||
![]() |
a048ea668f | ||
![]() |
5af78ad2cd | ||
![]() |
338e89176d | ||
![]() |
a266599118 | ||
![]() |
80f624e4cc | ||
![]() |
002d56d8b3 | ||
![]() |
be4a1e7fd7 | ||
![]() |
a0a45333f1 | ||
![]() |
dba998fea0 | ||
![]() |
fe2b49cf81 | ||
![]() |
c90f1511dc | ||
![]() |
763d17281f | ||
![]() |
1ae5339c33 | ||
![]() |
7562e0e870 | ||
![]() |
0e456f33c1 | ||
![]() |
6778d36454 | ||
![]() |
bc54860ad6 | ||
![]() |
4894578b72 | ||
![]() |
fb7f7d0c75 | ||
![]() |
48fa4e116c | ||
![]() |
e9d3928fe0 | ||
![]() |
2a6f02fa29 | ||
![]() |
ce0e5be7ce | ||
![]() |
a8b6a40f13 | ||
![]() |
88a91e0769 | ||
![]() |
21f4676b16 | ||
![]() |
bb2a874fd5 | ||
![]() |
56667e717b | ||
![]() |
caaaa05710 | ||
![]() |
d69e6bb7aa | ||
![]() |
a1903e5d67 | ||
![]() |
64d8db0c93 | ||
![]() |
7b608fd0c9 | ||
![]() |
19cbffb5e2 | ||
![]() |
c5ea6b0502 | ||
![]() |
639ed40314 | ||
![]() |
c5cbda0bbe | ||
![]() |
59e37210f3 | ||
![]() |
9351f66c26 | ||
![]() |
7432c4dbfe | ||
![]() |
1069bea273 | ||
![]() |
c740d105c9 | ||
![]() |
66a5a9863f | ||
![]() |
7ca47b8916 | ||
![]() |
bcfa4866fe | ||
![]() |
de8377ab53 | ||
![]() |
b85b1e8834 | ||
![]() |
eba5a48abd | ||
![]() |
a90ade0446 | ||
![]() |
0b86eb9b4c | ||
![]() |
359c4fef9d | ||
![]() |
71b1cb3b9c | ||
![]() |
b740cc23d3 | ||
![]() |
613e9866aa | ||
![]() |
bc937d38a2 | ||
![]() |
35fcf39fc8 | ||
![]() |
bd45dc5d0f | ||
![]() |
7377974731 | ||
![]() |
669b67e666 | ||
![]() |
a2b85ba1fd | ||
![]() |
dc22109fa7 | ||
![]() |
4471a6377e | ||
![]() |
3f762a416d | ||
![]() |
a59a6ce8e4 | ||
![]() |
189514c6de | ||
![]() |
dded874350 | ||
![]() |
e42fa0e027 | ||
![]() |
33ffe95294 | ||
![]() |
0657238ad1 | ||
![]() |
4efece4ab8 | ||
![]() |
b9b2ed64f9 | ||
![]() |
16bc0531f4 | ||
![]() |
39c34078d6 | ||
![]() |
9318f05e2b | ||
![]() |
95f3073e6f | ||
![]() |
6f4a9390ba | ||
![]() |
0eb6967bb2 | ||
![]() |
2854630b1c | ||
![]() |
bbd781c420 | ||
![]() |
f7cfdfcf63 | ||
![]() |
af7c32d3aa | ||
![]() |
0d334369f0 | ||
![]() |
08f3630f01 | ||
![]() |
2b17838820 | ||
![]() |
0b0338a9cb | ||
![]() |
a24f2ae884 | ||
![]() |
ec5b0b5403 | ||
![]() |
df2d449f9b | ||
![]() |
eecd221d40 | ||
![]() |
3951b891c1 | ||
![]() |
eab455422f | ||
![]() |
75c93d72be | ||
![]() |
6842e8263d | ||
![]() |
f35d94d98e | ||
![]() |
01206a0e2e | ||
![]() |
cf9e3193bc | ||
![]() |
f5239ffb0b | ||
![]() |
746fe7ba09 | ||
![]() |
7c1a986e61 | ||
![]() |
c6b772da11 | ||
![]() |
11cfe38d1c | ||
![]() |
4ca6de2b54 | ||
![]() |
e1abcc684a | ||
![]() |
bbd936fdfa | ||
![]() |
f58eed13d0 | ||
![]() |
8a708fd97e | ||
![]() |
bf8d993743 | ||
![]() |
c029122a8e | ||
![]() |
54327d579b | ||
![]() |
6c10aa33e1 | ||
![]() |
b7c098c5e6 | ||
![]() |
c18c42e866 | ||
![]() |
386f99cb1d | ||
![]() |
a4b606c6e9 | ||
![]() |
baa8d2c326 | ||
![]() |
e1ca0f3ff9 | ||
![]() |
ca2be2f499 | ||
![]() |
5960e7dda6 | ||
![]() |
efc04645b7 | ||
![]() |
f888fb4ac7 | ||
![]() |
e71e97cb68 | ||
![]() |
1b4c5fd34d | ||
![]() |
802ec5a14e | ||
![]() |
5341478036 | ||
![]() |
7694b21dff | ||
![]() |
cf061b7d30 | ||
![]() |
7fffb6526c | ||
![]() |
dd5b16831c | ||
![]() |
b3ca2ea179 | ||
![]() |
b5d67f90e4 | ||
![]() |
ce42f7c9f1 | ||
![]() |
02869d7428 | ||
![]() |
67b35b76ac | ||
![]() |
baebabbfd8 | ||
![]() |
154ee1a73e | ||
![]() |
b3fb6bd990 | ||
![]() |
926d51839f | ||
![]() |
8de966ea88 | ||
![]() |
85b0a40a0e | ||
![]() |
88fe94bd6a | ||
![]() |
1b53c590f2 | ||
![]() |
2ee5b35f48 | ||
![]() |
f0dd7b7dae | ||
![]() |
f08c0afbea | ||
![]() |
5a417c6a29 | ||
![]() |
9f32e6e50d | ||
![]() |
801cfdbc24 | ||
![]() |
889d994dbc | ||
![]() |
97c28e1e51 | ||
![]() |
ad6e2b4b94 | ||
![]() |
da12daffee | ||
![]() |
30319e51e5 | ||
![]() |
294ea17222 | ||
![]() |
fad954df18 | ||
![]() |
25be00931a | ||
![]() |
cd9ed1706d | ||
![]() |
b034b86be8 | ||
![]() |
aa189a7fc6 | ||
![]() |
074cbdad28 | ||
![]() |
cbc0ef860b | ||
![]() |
ab64ee872b | ||
![]() |
a63515b8f4 | ||
![]() |
4dcd6df136 | ||
![]() |
cea1bbde23 | ||
![]() |
2c8447853b | ||
![]() |
116664285d | ||
![]() |
213b18e33b | ||
![]() |
299f981441 | ||
![]() |
7ea827f8d3 | ||
![]() |
c2af5c6a3f | ||
![]() |
63812ca951 | ||
![]() |
98bdfcef65 | ||
![]() |
ac97ed685f | ||
![]() |
c5ff9b353c | ||
![]() |
04c1988665 | ||
![]() |
36c14ca587 | ||
![]() |
0c118bed61 | ||
![]() |
6c6474291e | ||
![]() |
7fa89c9ba4 | ||
![]() |
d2aad3a3ca | ||
![]() |
ca09b0491e | ||
![]() |
2e08ae82b1 | ||
![]() |
2652c73a4f | ||
![]() |
a21bff1dbd | ||
![]() |
14fc3dc9b3 | ||
![]() |
5cb295341c | ||
![]() |
b854c3b00e | ||
![]() |
2d3ff6a97c | ||
![]() |
c627ed4b6f | ||
![]() |
70ec183fca | ||
![]() |
1e45b7f50b | ||
![]() |
293479a1f2 | ||
![]() |
7b8962a796 | ||
![]() |
852a14992c | ||
![]() |
37e6a9ebc2 | ||
![]() |
b3f5bf1583 | ||
![]() |
a3a8c19dc2 | ||
![]() |
bc94de5626 | ||
![]() |
c3a64b3d6c | ||
![]() |
70eed10a34 | ||
![]() |
56c3983885 | ||
![]() |
78eaa49cd6 | ||
![]() |
2668a42f0c | ||
![]() |
4a7f1116ac | ||
![]() |
f12ce78b5c | ||
![]() |
610009fb7f | ||
![]() |
4cb075b168 | ||
![]() |
cf96e6c642 | ||
![]() |
dd1bd8ad10 | ||
![]() |
facfa26eed | ||
![]() |
0012a3ede7 | ||
![]() |
b61a818a3f | ||
![]() |
a2c44dedce | ||
![]() |
a8ad4f784a | ||
![]() |
78d69bcbf0 | ||
![]() |
414361a3db | ||
![]() |
1d4071d6d8 | ||
![]() |
47daf1b358 | ||
![]() |
7a910a8cc1 | ||
![]() |
9818c7b6a4 | ||
![]() |
ca9e5e8531 | ||
![]() |
aafee60033 | ||
![]() |
adf7c4ffb6 | ||
![]() |
96965ae347 | ||
![]() |
bc2ef5d726 | ||
![]() |
7a539d9890 | ||
![]() |
c40408b337 | ||
![]() |
4e2daf117b | ||
![]() |
9553afc3c2 | ||
![]() |
26352c9eb4 | ||
![]() |
62c167fc77 | ||
![]() |
03c774eae7 | ||
![]() |
53992bf0d5 | ||
![]() |
ff99e5ac9a | ||
![]() |
0cc318664d | ||
![]() |
43c427b253 | ||
![]() |
44c8d60a70 | ||
![]() |
54252184ab | ||
![]() |
7ae68b20e7 | ||
![]() |
208234b934 | ||
![]() |
1729b9f29c | ||
![]() |
5d69334287 | ||
![]() |
4d54fb675f | ||
![]() |
e93de54eb5 | ||
![]() |
43441d8291 | ||
![]() |
d6dce1efe9 | ||
![]() |
dca69f053a | ||
![]() |
5ebbed8160 | ||
![]() |
3fdb330bd9 | ||
![]() |
c05dbc451a | ||
![]() |
5f623e32c4 | ||
![]() |
7c37c5c06f | ||
![]() |
4d541ca969 | ||
![]() |
e4a67183bd | ||
![]() |
d25be686ee | ||
![]() |
a3be239a60 | ||
![]() |
709a053c7c | ||
![]() |
d39c6bef4b | ||
![]() |
84a8158aa2 | ||
![]() |
a7c5826e05 | ||
![]() |
2da39e2fbb | ||
![]() |
d6e0164766 | ||
![]() |
fbc85bed64 | ||
![]() |
52b54fe154 | ||
![]() |
f44341a8e2 | ||
![]() |
9f6130cbaa | ||
![]() |
24d73f5822 | ||
![]() |
d3bdeaab3f | ||
![]() |
b66f4b9322 | ||
![]() |
9dfe5f5f07 | ||
![]() |
d6fc020ba7 |
@@ -1,93 +0,0 @@
|
|||||||
version: '{branch}-{build}'
|
|
||||||
|
|
||||||
# Do not build on tags (GitHub only)
|
|
||||||
skip_tags: true
|
|
||||||
|
|
||||||
image: Visual Studio 2022
|
|
||||||
|
|
||||||
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_64
|
|
||||||
QBT_LIB_URL: https://builds.shiki.hu/appveyor/qbt_libraries_64.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_64.7z" -o"c:\qbt" > nul
|
|
||||||
|
|
||||||
before_build:
|
|
||||||
# setup env
|
|
||||||
- CALL "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" x64
|
|
||||||
- SET PATH=%PATH%;C:\Qt\5.15.2\msvc2019_64\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
|
|
||||||
|
|
||||||
after_build:
|
|
||||||
- cd "%REPO_DIR%"
|
|
||||||
- MKDIR upload
|
|
||||||
- COPY dist\windows\qt.conf upload
|
|
||||||
- COPY src\release\qbittorrent.exe upload
|
|
||||||
- COPY src\release\qbittorrent.pdb upload
|
|
||||||
- COPY "%CACHE_DIR%\base\bin\libcrypto-1_1-x64.dll" upload
|
|
||||||
- COPY "%CACHE_DIR%\base\bin\libssl-1_1-x64.dll" upload
|
|
||||||
- COPY "%CACHE_DIR%\base\lib\torrent-rasterbar.dll" upload
|
|
||||||
- COPY "%CACHE_DIR%\base\lib\zlib1.dll" upload
|
|
||||||
- COPY C:\Qt\5.15.2\msvc2019_64\bin\Qt5Core.dll upload
|
|
||||||
- COPY C:\Qt\5.15.2\msvc2019_64\bin\Qt5Gui.dll upload
|
|
||||||
- COPY C:\Qt\5.15.2\msvc2019_64\bin\Qt5Network.dll upload
|
|
||||||
- COPY C:\Qt\5.15.2\msvc2019_64\bin\Qt5Sql.dll upload
|
|
||||||
- COPY C:\Qt\5.15.2\msvc2019_64\bin\Qt5Svg.dll upload
|
|
||||||
- COPY C:\Qt\5.15.2\msvc2019_64\bin\Qt5Widgets.dll upload
|
|
||||||
- COPY C:\Qt\5.15.2\msvc2019_64\bin\Qt5WinExtras.dll upload
|
|
||||||
- COPY C:\Qt\5.15.2\msvc2019_64\bin\Qt5Xml.dll upload
|
|
||||||
- MKDIR upload\plugins\iconengines
|
|
||||||
- COPY C:\Qt\5.15.2\msvc2019_64\plugins\iconengines\qsvgicon.dll upload\plugins\iconengines
|
|
||||||
- MKDIR upload\plugins\imageformats
|
|
||||||
- COPY C:\Qt\5.15.2\msvc2019_64\plugins\imageformats\qico.dll upload\plugins\imageformats
|
|
||||||
- COPY C:\Qt\5.15.2\msvc2019_64\plugins\imageformats\qsvg.dll upload\plugins\imageformats
|
|
||||||
- MKDIR upload\plugins\platforms
|
|
||||||
- COPY C:\Qt\5.15.2\msvc2019_64\plugins\platforms\qwindows.dll upload\plugins\platforms
|
|
||||||
- MKDIR upload\plugins\sqldrivers
|
|
||||||
- COPY C:\Qt\5.15.2\msvc2019_64\plugins\sqldrivers\qsqlite.dll upload\plugins\sqldrivers
|
|
||||||
- MKDIR upload\plugins\styles
|
|
||||||
- COPY C:\Qt\5.15.2\msvc2019_64\plugins\styles\qwindowsvistastyle.dll upload\plugins\styles
|
|
||||||
|
|
||||||
test: off
|
|
||||||
|
|
||||||
artifacts:
|
|
||||||
- path: upload
|
|
||||||
name: qBittorrent-Appveyor_Windows-x64
|
|
81
.clang-tidy
Normal file
81
.clang-tidy
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
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,8 +1,10 @@
|
|||||||
# EditorConfig is awesome: http://EditorConfig.org
|
# EditorConfig is awesome: https://EditorConfig.org
|
||||||
|
|
||||||
root = true
|
root = true
|
||||||
|
|
||||||
[*]
|
[*]
|
||||||
|
charset = utf-8
|
||||||
|
end_of_line = lf
|
||||||
indent_style = space
|
indent_style = space
|
||||||
indent_size = 4
|
indent_size = 4
|
||||||
insert_final_newline = true
|
insert_final_newline = true
|
||||||
|
11
.gitattributes
vendored
11
.gitattributes
vendored
@@ -1,7 +1,10 @@
|
|||||||
core.eol=lf
|
core.eol=lf
|
||||||
* text eol=lf
|
* text eol=lf
|
||||||
*.zip binary
|
|
||||||
*.png binary
|
|
||||||
*.ico binary
|
|
||||||
*.qm binary
|
|
||||||
*.icns binary
|
*.icns binary
|
||||||
|
*.ico binary
|
||||||
|
*.png binary
|
||||||
|
*.qm binary
|
||||||
|
*.zip binary
|
||||||
|
|
||||||
|
dist/windows/license.txt text eol=crlf
|
||||||
|
test/testdata/crlf.txt text eol=crlf
|
||||||
|
2
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
2
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
@@ -14,7 +14,7 @@ body:
|
|||||||
#### Prerequisites before submitting an issue!
|
#### 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.
|
- 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).**
|
- 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.
|
- (Optional, but recommended) Verify that the issue is not fixed and is reproducible in the latest CI (currently only on **[Windows](https://github.com/qbittorrent/qBittorrent/actions/workflows/ci_windows.yaml?query=branch%3Amaster+event%3Apush)**) builds.
|
||||||
- Check the **[frequent/common issues list](https://github.com/qbittorrent/qBittorrent/projects/2)** and perform a **[search of the issue tracker (including closed ones)](https://github.com/qbittorrent/qBittorrent/issues)** to avoid posting a duplicate.
|
- Check the **[frequent/common issues list](https://github.com/qbittorrent/qBittorrent/projects/2)** and perform a **[search of the issue tracker (including closed ones)](https://github.com/qbittorrent/qBittorrent/issues)** 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/)**.
|
- 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.
|
- Verify that the **[wiki](https://github.com/qbittorrent/qBittorrent/wiki)** did not contain a suitable solution either.
|
||||||
|
2
.github/SUPPORT.md
vendored
2
.github/SUPPORT.md
vendored
@@ -9,7 +9,7 @@ For such questions, use one of the following community support resources:
|
|||||||
|
|
||||||
* The [discussions section][discussions-url]
|
* The [discussions section][discussions-url]
|
||||||
|
|
||||||
* The official forum [official forum][forum-url]
|
* The [official forum][forum-url]
|
||||||
|
|
||||||
* The [qBittorrent subreddit][subreddit-url]
|
* The [qBittorrent subreddit][subreddit-url]
|
||||||
|
|
||||||
|
15
.github/dependabot.yml
vendored
Normal file
15
.github/dependabot.yml
vendored
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
version: 2
|
||||||
|
|
||||||
|
updates:
|
||||||
|
- package-ecosystem: "github-actions"
|
||||||
|
directory: "/"
|
||||||
|
commit-message:
|
||||||
|
prefix: "GHA CI"
|
||||||
|
groups:
|
||||||
|
github-actions:
|
||||||
|
patterns:
|
||||||
|
- "*"
|
||||||
|
labels:
|
||||||
|
- "CI"
|
||||||
|
schedule:
|
||||||
|
interval: "monthly"
|
33
.github/workflows/ci_file_health.yaml
vendored
33
.github/workflows/ci_file_health.yaml
vendored
@@ -2,16 +2,43 @@ name: CI - File health
|
|||||||
|
|
||||||
on: [pull_request, push]
|
on: [pull_request, push]
|
||||||
|
|
||||||
|
permissions: {}
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
|
||||||
|
cancel-in-progress: ${{ github.head_ref != '' }}
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
ci:
|
ci:
|
||||||
name: Check
|
name: Check
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Install tools
|
- name: Install tools
|
||||||
uses: actions/setup-python@v2
|
uses: actions/setup-python@v5
|
||||||
|
with:
|
||||||
|
python-version: "*"
|
||||||
|
|
||||||
- name: Check files
|
- name: Check files
|
||||||
uses: pre-commit/action@v2.0.3
|
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.1.7/pandoc-3.1.7-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
|
||||||
|
123
.github/workflows/ci_macos.yaml
vendored
123
.github/workflows/ci_macos.yaml
vendored
@@ -1,6 +1,14 @@
|
|||||||
name: CI - macOS
|
name: CI - macOS
|
||||||
|
|
||||||
on: [pull_request, push]
|
on: [pull_request, push]
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
actions: write
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
|
||||||
|
cancel-in-progress: ${{ github.head_ref != '' }}
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
ci:
|
ci:
|
||||||
name: Build
|
name: Build
|
||||||
@@ -9,36 +17,64 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
libt_version: ["2.0.5", "1.2.15"]
|
libt_version: ["2.0.10", "1.2.19"]
|
||||||
qbt_gui: ["GUI=ON", "GUI=OFF"]
|
qbt_gui: ["GUI=ON", "GUI=OFF"]
|
||||||
qt_version: ["5.15.2", "6.2.0"]
|
qt_version: ["6.7.0"]
|
||||||
exclude:
|
|
||||||
- libt_version: "1.2.15"
|
|
||||||
qt_version: "6.2.0"
|
|
||||||
|
|
||||||
env:
|
env:
|
||||||
openssl_root: /usr/local/opt/openssl@1.1
|
boost_path: "${{ github.workspace }}/../boost"
|
||||||
|
libtorrent_path: "${{ github.workspace }}/../libtorrent"
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: |
|
uses: Wandalen/wretry.action@v3
|
||||||
brew update > /dev/null
|
env:
|
||||||
brew install \
|
HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK: 1
|
||||||
cmake ninja \
|
HOMEBREW_NO_INSTALL_CLEANUP: 1
|
||||||
boost openssl@1.1 zlib
|
with:
|
||||||
|
attempt_delay: 20000
|
||||||
|
attempt_limit: 6
|
||||||
|
command: |
|
||||||
|
brew update > /dev/null
|
||||||
|
brew install \
|
||||||
|
cmake ninja \
|
||||||
|
openssl@3 zlib
|
||||||
|
|
||||||
- name: Setup ccache
|
- name: Setup ccache
|
||||||
uses: Chocobo1/setup-ccache-action@v1
|
uses: Chocobo1/setup-ccache-action@v1
|
||||||
with:
|
with:
|
||||||
|
store_cache: ${{ github.ref == 'refs/heads/master' }}
|
||||||
update_packager_index: false
|
update_packager_index: false
|
||||||
|
ccache_options: |
|
||||||
|
max_size=2G
|
||||||
|
|
||||||
|
- name: Install boost
|
||||||
|
env:
|
||||||
|
BOOST_MAJOR_VERSION: "1"
|
||||||
|
BOOST_MINOR_VERSION: "85"
|
||||||
|
BOOST_PATCH_VERSION: "0"
|
||||||
|
run: |
|
||||||
|
boost_url="https://boostorg.jfrog.io/artifactory/main/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
|
- name: Install Qt
|
||||||
uses: jurplel/install-qt-action@v2
|
uses: jurplel/install-qt-action@v4
|
||||||
with:
|
with:
|
||||||
version: ${{ matrix.qt_version }}
|
version: ${{ matrix.qt_version }}
|
||||||
|
archives: qtbase qtdeclarative qtsvg qttools
|
||||||
|
# Not sure why Qt made a hard dependency on qtdeclarative, try removing it when Qt > 6.4.0
|
||||||
|
cache: true
|
||||||
|
|
||||||
- name: Install libtorrent
|
- name: Install libtorrent
|
||||||
run: |
|
run: |
|
||||||
@@ -46,59 +82,68 @@ jobs:
|
|||||||
--branch v${{ matrix.libt_version }} \
|
--branch v${{ matrix.libt_version }} \
|
||||||
--depth 1 \
|
--depth 1 \
|
||||||
--recurse-submodules \
|
--recurse-submodules \
|
||||||
https://github.com/arvidn/libtorrent.git
|
https://github.com/arvidn/libtorrent.git \
|
||||||
cd libtorrent
|
${{ env.libtorrent_path }}
|
||||||
|
cd ${{ env.libtorrent_path }}
|
||||||
cmake \
|
cmake \
|
||||||
-B build \
|
-B build \
|
||||||
-G "Ninja" \
|
-G "Ninja" \
|
||||||
|
-DBUILD_SHARED_LIBS=OFF \
|
||||||
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
|
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
|
||||||
-DCMAKE_CXX_STANDARD=17 \
|
-DCMAKE_CXX_STANDARD=17 \
|
||||||
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
|
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
|
||||||
-Ddeprecated-functions=OFF \
|
-DBOOST_ROOT="${{ env.boost_path }}" \
|
||||||
-DOPENSSL_ROOT_DIR="${{ env.openssl_root }}"
|
-Ddeprecated-functions=OFF
|
||||||
cmake --build build
|
cmake --build build
|
||||||
sudo cmake --install build
|
sudo cmake --install build
|
||||||
|
|
||||||
- name: Build qBittorrent (Qt5)
|
- name: Build qBittorrent
|
||||||
if: ${{ startsWith(matrix.qt_version, 5) }}
|
|
||||||
run: |
|
run: |
|
||||||
lupdate -extensions c,cpp,h,hpp,ui ./
|
CXXFLAGS="$CXXFLAGS -Werror -Wno-error=deprecated-declarations" \
|
||||||
|
LDFLAGS="$LDFLAGS -gz" \
|
||||||
cmake \
|
cmake \
|
||||||
-B build \
|
-B build \
|
||||||
-G "Ninja" \
|
-G "Ninja" \
|
||||||
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
|
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
|
||||||
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
|
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
|
||||||
-DOPENSSL_ROOT_DIR="${{ env.openssl_root }}" \
|
-DBOOST_ROOT="${{ env.boost_path }}" \
|
||||||
-DVERBOSE_CONFIGURE=ON \
|
-DTESTING=ON \
|
||||||
-D${{ matrix.qbt_gui }}
|
|
||||||
cmake --build build
|
|
||||||
|
|
||||||
- name: Build qBittorrent (Qt6)
|
|
||||||
if: ${{ startsWith(matrix.qt_version, 6) }}
|
|
||||||
run: |
|
|
||||||
lupdate -extensions c,cpp,h,hpp,ui ./
|
|
||||||
cmake \
|
|
||||||
-B build \
|
|
||||||
-G "Ninja" \
|
|
||||||
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
|
|
||||||
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
|
|
||||||
-DOPENSSL_ROOT_DIR="${{ env.openssl_root }}" \
|
|
||||||
-DQT6=ON \
|
|
||||||
-DVERBOSE_CONFIGURE=ON \
|
-DVERBOSE_CONFIGURE=ON \
|
||||||
-D${{ matrix.qbt_gui }}
|
-D${{ matrix.qbt_gui }}
|
||||||
|
cmake --build build --target qbt_update_translations
|
||||||
cmake --build build
|
cmake --build build
|
||||||
|
cmake --build build --target check
|
||||||
|
|
||||||
- name: Prepare build artifacts
|
- name: Prepare build artifacts
|
||||||
run: |
|
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
|
mkdir upload
|
||||||
mv build/qbittorrent*.app upload
|
cp "build/$appName.dmg" upload
|
||||||
mkdir upload/cmake
|
mkdir upload/cmake
|
||||||
cp build/compile_commands.json upload/cmake
|
cp build/compile_commands.json upload/cmake
|
||||||
mkdir upload/cmake/libtorrent
|
mkdir upload/cmake/libtorrent
|
||||||
cp libtorrent/build/compile_commands.json upload/cmake/libtorrent
|
cp ${{ env.libtorrent_path }}/build/compile_commands.json upload/cmake/libtorrent
|
||||||
|
|
||||||
- name: Upload build artifacts
|
- name: Upload build artifacts
|
||||||
uses: actions/upload-artifact@v2
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: qBittorrent-CI_macOS_${{ matrix.qbt_gui }}_libtorrent-${{ matrix.libt_version }}_Qt-${{ matrix.qt_version }}
|
name: qBittorrent-CI_macOS_${{ matrix.qbt_gui }}_libtorrent-${{ matrix.libt_version }}_Qt-${{ matrix.qt_version }}
|
||||||
path: upload
|
path: upload
|
||||||
|
89
.github/workflows/ci_python.yaml
vendored
Normal file
89
.github/workflows/ci_python.yaml
vendored
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
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
|
||||||
|
|
||||||
|
- 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 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.7'
|
||||||
|
|
||||||
|
- 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
|
134
.github/workflows/ci_ubuntu.yaml
vendored
134
.github/workflows/ci_ubuntu.yaml
vendored
@@ -1,43 +1,74 @@
|
|||||||
name: CI - Ubuntu
|
name: CI - Ubuntu
|
||||||
|
|
||||||
on: [pull_request, push]
|
on: [pull_request, push]
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
actions: write
|
||||||
|
security-events: write
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
|
||||||
|
cancel-in-progress: ${{ github.head_ref != '' }}
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
ci:
|
ci:
|
||||||
name: Build
|
name: Build
|
||||||
runs-on: ubuntu-20.04
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
libt_version: ["2.0.5", "1.2.15"]
|
libt_version: ["2.0.10", "1.2.19"]
|
||||||
qbt_gui: ["GUI=ON", "GUI=OFF"]
|
qbt_gui: ["GUI=ON", "GUI=OFF"]
|
||||||
qt_version: ["5.15.2", "6.2.0"]
|
qt_version: ["6.5.2"]
|
||||||
exclude:
|
|
||||||
- libt_version: "1.2.15"
|
env:
|
||||||
qt_version: "6.2.0"
|
boost_path: "${{ github.workspace }}/../boost"
|
||||||
|
harden_flags: "-D_FORTIFY_SOURCE=2 -D_GLIBCXX_ASSERTIONS"
|
||||||
|
libtorrent_path: "${{ github.workspace }}/../libtorrent"
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: |
|
run: |
|
||||||
sudo apt update
|
sudo apt update
|
||||||
sudo apt install \
|
sudo apt install \
|
||||||
build-essential cmake ninja-build pkg-config \
|
build-essential cmake ninja-build \
|
||||||
libboost-dev libssl-dev zlib1g-dev
|
libssl-dev libxkbcommon-x11-dev libxcb-cursor-dev zlib1g-dev
|
||||||
|
|
||||||
- name: Setup ccache
|
- name: Setup ccache
|
||||||
uses: Chocobo1/setup-ccache-action@v1
|
uses: Chocobo1/setup-ccache-action@v1
|
||||||
with:
|
with:
|
||||||
|
store_cache: ${{ github.ref == 'refs/heads/master' }}
|
||||||
update_packager_index: false
|
update_packager_index: false
|
||||||
ccache_options: |
|
ccache_options: |
|
||||||
max_size=2G
|
max_size=2G
|
||||||
|
|
||||||
|
- name: Install boost
|
||||||
|
env:
|
||||||
|
BOOST_MAJOR_VERSION: "1"
|
||||||
|
BOOST_MINOR_VERSION: "76"
|
||||||
|
BOOST_PATCH_VERSION: "0"
|
||||||
|
run: |
|
||||||
|
boost_url="https://boostorg.jfrog.io/artifactory/main/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
|
- name: Install Qt
|
||||||
uses: jurplel/install-qt-action@v2
|
uses: jurplel/install-qt-action@v4
|
||||||
with:
|
with:
|
||||||
version: ${{ matrix.qt_version }}
|
version: ${{ matrix.qt_version }}
|
||||||
|
archives: icu qtbase qtdeclarative qtsvg qttools
|
||||||
|
cache: true
|
||||||
|
|
||||||
- name: Install libtorrent
|
- name: Install libtorrent
|
||||||
run: |
|
run: |
|
||||||
@@ -45,47 +76,53 @@ jobs:
|
|||||||
--branch v${{ matrix.libt_version }} \
|
--branch v${{ matrix.libt_version }} \
|
||||||
--depth 1 \
|
--depth 1 \
|
||||||
--recurse-submodules \
|
--recurse-submodules \
|
||||||
https://github.com/arvidn/libtorrent.git
|
https://github.com/arvidn/libtorrent.git \
|
||||||
cd libtorrent
|
${{ env.libtorrent_path }}
|
||||||
|
cd ${{ env.libtorrent_path }}
|
||||||
|
CXXFLAGS="$CXXFLAGS ${{ env.harden_flags }}" \
|
||||||
cmake \
|
cmake \
|
||||||
-B build \
|
-B build \
|
||||||
-G "Ninja" \
|
-G "Ninja" \
|
||||||
|
-DBUILD_SHARED_LIBS=OFF \
|
||||||
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
|
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
|
||||||
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
|
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
|
||||||
|
-DBOOST_ROOT="${{ env.boost_path }}" \
|
||||||
-Ddeprecated-functions=OFF
|
-Ddeprecated-functions=OFF
|
||||||
cmake --build build
|
cmake --build build
|
||||||
sudo cmake --install build
|
sudo cmake --install build
|
||||||
|
|
||||||
- name: Build qBittorrent (Qt5)
|
# to avoid scanning 3rdparty codebases, initialize it just before building qbt
|
||||||
if: ${{ startsWith(matrix.qt_version, 5) }}
|
- 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: |
|
run: |
|
||||||
lupdate -extensions c,cpp,h,hpp,ui ./
|
CXXFLAGS="$CXXFLAGS ${{ env.harden_flags }} -Werror" \
|
||||||
|
LDFLAGS="$LDFLAGS -gz" \
|
||||||
cmake \
|
cmake \
|
||||||
-B build \
|
-B build \
|
||||||
-G "Ninja" \
|
-G "Ninja" \
|
||||||
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
|
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
|
||||||
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
|
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
|
||||||
|
-DBOOST_ROOT="${{ env.boost_path }}" \
|
||||||
-DCMAKE_INSTALL_PREFIX="/usr" \
|
-DCMAKE_INSTALL_PREFIX="/usr" \
|
||||||
|
-DTESTING=ON \
|
||||||
-DVERBOSE_CONFIGURE=ON \
|
-DVERBOSE_CONFIGURE=ON \
|
||||||
-D${{ matrix.qbt_gui }}
|
-D${{ matrix.qbt_gui }}
|
||||||
|
cmake --build build --target qbt_update_translations
|
||||||
cmake --build build
|
cmake --build build
|
||||||
|
cmake --build build --target check
|
||||||
DESTDIR="qbittorrent" cmake --install build
|
DESTDIR="qbittorrent" cmake --install build
|
||||||
|
|
||||||
- name: Build qBittorrent (Qt6)
|
- name: Run CodeQL analysis
|
||||||
if: ${{ startsWith(matrix.qt_version, 6) }}
|
uses: github/codeql-action/analyze@v3
|
||||||
run: |
|
if: startsWith(matrix.libt_version, 2) && (matrix.qbt_gui == 'GUI=ON')
|
||||||
lupdate -extensions c,cpp,h,hpp,ui ./
|
with:
|
||||||
cmake \
|
category: ${{ github.base_ref || github.ref_name }}
|
||||||
-B build \
|
|
||||||
-G "Ninja" \
|
|
||||||
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
|
|
||||||
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
|
|
||||||
-DCMAKE_INSTALL_PREFIX="/usr" \
|
|
||||||
-DQT6=ON \
|
|
||||||
-DVERBOSE_CONFIGURE=ON \
|
|
||||||
-D${{ matrix.qbt_gui }}
|
|
||||||
cmake --build build
|
|
||||||
DESTDIR="qbittorrent" cmake --install build
|
|
||||||
|
|
||||||
- name: Prepare build artifacts
|
- name: Prepare build artifacts
|
||||||
run: |
|
run: |
|
||||||
@@ -93,10 +130,41 @@ jobs:
|
|||||||
mkdir upload/cmake
|
mkdir upload/cmake
|
||||||
cp build/compile_commands.json upload/cmake
|
cp build/compile_commands.json upload/cmake
|
||||||
mkdir upload/cmake/libtorrent
|
mkdir upload/cmake/libtorrent
|
||||||
cp libtorrent/build/compile_commands.json upload/cmake/libtorrent
|
cp ${{ env.libtorrent_path }}/build/compile_commands.json upload/cmake/libtorrent
|
||||||
|
|
||||||
|
- name: Install AppImage
|
||||||
|
run: |
|
||||||
|
sudo apt install libfuse2
|
||||||
|
curl \
|
||||||
|
-L \
|
||||||
|
-Z \
|
||||||
|
-O https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-static-x86_64.AppImage \
|
||||||
|
-O https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-static-x86_64.AppImage \
|
||||||
|
-O https://github.com/linuxdeploy/linuxdeploy-plugin-appimage/releases/download/continuous/linuxdeploy-plugin-appimage-x86_64.AppImage
|
||||||
|
chmod +x \
|
||||||
|
linuxdeploy-static-x86_64.AppImage \
|
||||||
|
linuxdeploy-plugin-qt-static-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-static-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-static-x86_64.AppImage --appdir qbittorrent --output appimage
|
||||||
|
|
||||||
- name: Upload build artifacts
|
- name: Upload build artifacts
|
||||||
uses: actions/upload-artifact@v2
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: build-info_ubuntu-20.04-x64_${{ matrix.qbt_gui }}_libtorrent-${{ matrix.libt_version }}_Qt-${{ matrix.qt_version }}
|
name: qBittorrent-CI_Ubuntu-x64_${{ matrix.qbt_gui }}_libtorrent-${{ matrix.libt_version }}_Qt-${{ matrix.qt_version }}
|
||||||
path: upload
|
path: upload
|
||||||
|
20
.github/workflows/ci_webui.yaml
vendored
20
.github/workflows/ci_webui.yaml
vendored
@@ -2,6 +2,13 @@ name: CI - WebUI
|
|||||||
|
|
||||||
on: [pull_request, push]
|
on: [pull_request, push]
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
security-events: write
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
|
||||||
|
cancel-in-progress: ${{ github.head_ref != '' }}
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
ci:
|
ci:
|
||||||
name: Check
|
name: Check
|
||||||
@@ -13,10 +20,10 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Setup nodejs
|
- name: Setup nodejs
|
||||||
uses: actions/setup-node@v2
|
uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: 'lts/*'
|
node-version: 'lts/*'
|
||||||
|
|
||||||
@@ -30,3 +37,12 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
npm run format
|
npm run format
|
||||||
git diff --exit-code
|
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
|
||||||
|
184
.github/workflows/ci_windows.yaml
vendored
184
.github/workflows/ci_windows.yaml
vendored
File diff suppressed because it is too large
Load Diff
115
.github/workflows/coverity-scan.yaml
vendored
Normal file
115
.github/workflows/coverity-scan.yaml
vendored
Normal file
@@ -0,0 +1,115 @@
|
|||||||
|
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.10"]
|
||||||
|
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
|
||||||
|
|
||||||
|
- 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: "85"
|
||||||
|
BOOST_PATCH_VERSION: "0"
|
||||||
|
run: |
|
||||||
|
boost_url="https://boostorg.jfrog.io/artifactory/main/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 \
|
||||||
|
-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
|
74
.github/workflows/coverity-scan.yml
vendored
74
.github/workflows/coverity-scan.yml
vendored
@@ -1,74 +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.
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
coverity_scan:
|
|
||||||
name: Scan
|
|
||||||
runs-on: ubuntu-20.04
|
|
||||||
steps:
|
|
||||||
- name: Checkout repository
|
|
||||||
uses: actions/checkout@v2
|
|
||||||
|
|
||||||
- name: Install dependencies
|
|
||||||
run: |
|
|
||||||
sudo apt update
|
|
||||||
sudo apt install \
|
|
||||||
build-essential cmake ninja-build pkg-config \
|
|
||||||
libboost-dev libssl-dev zlib1g-dev
|
|
||||||
|
|
||||||
- name: Install Qt
|
|
||||||
uses: jurplel/install-qt-action@v2
|
|
||||||
with:
|
|
||||||
version: "5.15.2"
|
|
||||||
|
|
||||||
- name: Install libtorrent
|
|
||||||
run: |
|
|
||||||
git clone \
|
|
||||||
--branch "v2.0.5" \
|
|
||||||
--depth 1 \
|
|
||||||
--recurse-submodules \
|
|
||||||
https://github.com/arvidn/libtorrent.git
|
|
||||||
cd libtorrent
|
|
||||||
cmake \
|
|
||||||
-B build \
|
|
||||||
-G "Ninja" \
|
|
||||||
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
|
|
||||||
-Ddeprecated-functions=OFF
|
|
||||||
cmake --build build
|
|
||||||
sudo cmake --install build
|
|
||||||
|
|
||||||
- name: Download Coverity Build Tool
|
|
||||||
run: |
|
|
||||||
wget \
|
|
||||||
-q \
|
|
||||||
https://scan.coverity.com/download/linux64 \
|
|
||||||
--post-data "token=${{ secrets.COVERITY_SCAN_TOKEN }}&project=qbittorrent%2FqBittorrent" \
|
|
||||||
-O coverity_tool.tgz
|
|
||||||
mkdir coverity_tool
|
|
||||||
tar xzf coverity_tool.tgz --strip 1 -C coverity_tool
|
|
||||||
|
|
||||||
- name: Build qBittorrent
|
|
||||||
run: |
|
|
||||||
cmake \
|
|
||||||
-B build \
|
|
||||||
-G "Ninja" \
|
|
||||||
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
|
|
||||||
-DGUI=ON \
|
|
||||||
-DVERBOSE_CONFIGURE=ON
|
|
||||||
export PATH="$(pwd)/coverity_tool/bin:$PATH"
|
|
||||||
cov-build --dir cov-int cmake --build build
|
|
||||||
|
|
||||||
- name: Submit the result to Coverity Scan
|
|
||||||
run: |
|
|
||||||
tar caf qbittorrent.xz cov-int
|
|
||||||
curl \
|
|
||||||
--form token="${{ secrets.COVERITY_SCAN_TOKEN }}" \
|
|
||||||
--form email=sledgehammer999@qbittorrent.org \
|
|
||||||
--form file=@qbittorrent.xz \
|
|
||||||
--form version="$(git rev-parse --short HEAD)" \
|
|
||||||
--form description="master" \
|
|
||||||
https://scan.coverity.com/builds?project=qbittorrent%2FqBittorrent
|
|
13
.github/workflows/helper/appimage/export_vars.sh
vendored
Executable file
13
.github/workflows/helper/appimage/export_vars.sh
vendored
Executable file
@@ -0,0 +1,13 @@
|
|||||||
|
#!/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}"
|
6
.github/workflows/helper/appimage/org.qbittorrent.qBittorrent.desktop
vendored
Normal file
6
.github/workflows/helper/appimage/org.qbittorrent.qBittorrent.desktop
vendored
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Name=qBittorrent
|
||||||
|
Exec=qbittorrent-nox %U
|
||||||
|
Icon=qbittorrent
|
||||||
|
Type=Application
|
||||||
|
Categories=Network
|
14
.github/workflows/helper/codeql/cpp.yaml
vendored
Normal file
14
.github/workflows/helper/codeql/cpp.yaml
vendored
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
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
Normal file
11
.github/workflows/helper/codeql/js.yaml
vendored
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
name: "CodeQL config for Javascript"
|
||||||
|
|
||||||
|
paths-ignore:
|
||||||
|
- "**/lib/*"
|
||||||
|
|
||||||
|
queries:
|
||||||
|
- uses: security-and-quality
|
||||||
|
|
||||||
|
query-filters:
|
||||||
|
- exclude:
|
||||||
|
id: js/superfluous-trailing-arguments
|
18
.github/workflows/helper/pre-commit/.typos.toml
vendored
Normal file
18
.github/workflows/helper/pre-commit/.typos.toml
vendored
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# 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"
|
@@ -30,6 +30,7 @@ from typing import Optional, Sequence
|
|||||||
import argparse
|
import argparse
|
||||||
import re
|
import re
|
||||||
|
|
||||||
|
|
||||||
def main(argv: Optional[Sequence[str]] = None) -> int:
|
def main(argv: Optional[Sequence[str]] = None) -> int:
|
||||||
parser = argparse.ArgumentParser()
|
parser = argparse.ArgumentParser()
|
||||||
parser.add_argument('filenames', nargs='*', help='Filenames to check')
|
parser.add_argument('filenames', nargs='*', help='Filenames to check')
|
||||||
@@ -47,12 +48,12 @@ def main(argv: Optional[Sequence[str]] = None) -> int:
|
|||||||
for line in file:
|
for line in file:
|
||||||
if (match := regex.match(line)) is not None:
|
if (match := regex.match(line)) is not None:
|
||||||
error_buffer += str(f"Defect file: \"{filename}\"\n"
|
error_buffer += str(f"Defect file: \"{filename}\"\n"
|
||||||
f"Line: {line_counter}\n"
|
f"Line: {line_counter}\n"
|
||||||
f"Column span: {match.span()}\n"
|
f"Column span: {match.span()}\n"
|
||||||
f"Part: \"{match.group()}\"\n\n")
|
f"Part: \"{match.group()}\"\n\n")
|
||||||
line_counter += 1
|
line_counter += 1
|
||||||
|
|
||||||
except UnicodeDecodeError as error:
|
except UnicodeDecodeError:
|
||||||
# not a text file, skip
|
# not a text file, skip
|
||||||
continue
|
continue
|
||||||
|
|
||||||
@@ -64,5 +65,6 @@ def main(argv: Optional[Sequence[str]] = None) -> int:
|
|||||||
|
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
exit(main())
|
exit(main())
|
5
.github/workflows/stale_bot.yaml
vendored
5
.github/workflows/stale_bot.yaml
vendored
@@ -4,12 +4,15 @@ on:
|
|||||||
schedule:
|
schedule:
|
||||||
- cron: '0 0 * * *'
|
- cron: '0 0 * * *'
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
pull-requests: write
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
stale:
|
stale:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Mark and close stale PRs
|
- name: Mark and close stale PRs
|
||||||
uses: actions/stale@v4
|
uses: actions/stale@v9
|
||||||
with:
|
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."
|
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."
|
close-pr-message: "This PR was closed because it has been stalled for some time with no activity."
|
||||||
|
5
.gitignore
vendored
5
.gitignore
vendored
@@ -1,3 +1,4 @@
|
|||||||
|
.vscode/
|
||||||
src/gui/geoip/GeoIP.dat
|
src/gui/geoip/GeoIP.dat
|
||||||
src/gui/geoip/GeoIP.dat.gz
|
src/gui/geoip/GeoIP.dat.gz
|
||||||
src/qbittorrent
|
src/qbittorrent
|
||||||
@@ -16,6 +17,7 @@ Makefile*
|
|||||||
*.o
|
*.o
|
||||||
*.pdb
|
*.pdb
|
||||||
*.exe
|
*.exe
|
||||||
|
*.dll
|
||||||
|
|
||||||
# Generated MOC, resource and UI files
|
# Generated MOC, resource and UI files
|
||||||
moc_*.cpp
|
moc_*.cpp
|
||||||
@@ -23,8 +25,7 @@ moc_*.h
|
|||||||
qrc_*.cpp
|
qrc_*.cpp
|
||||||
ui_*.h
|
ui_*.h
|
||||||
*.moc
|
*.moc
|
||||||
src/lang/qbittorrent_*.qm
|
*.qm
|
||||||
src/webui/www/translations/webui_*.qm
|
|
||||||
.DS_Store
|
.DS_Store
|
||||||
.qmake.stash
|
.qmake.stash
|
||||||
src/qbittorrent.app
|
src/qbittorrent.app
|
||||||
|
@@ -3,13 +3,17 @@ repos:
|
|||||||
hooks:
|
hooks:
|
||||||
- id: check-translation-tag
|
- id: check-translation-tag
|
||||||
name: Check newline characters in <translation> tag
|
name: Check newline characters in <translation> tag
|
||||||
entry: .github/workflows/check_translation_tag.py
|
entry: .github/workflows/helper/pre-commit/check_translation_tag.py
|
||||||
language: script
|
language: script
|
||||||
|
exclude: |
|
||||||
|
(?x)^(
|
||||||
|
src/lang/.*
|
||||||
|
)$
|
||||||
types_or:
|
types_or:
|
||||||
- ts
|
- ts
|
||||||
|
|
||||||
- repo: https://github.com/pre-commit/pre-commit-hooks.git
|
- repo: https://github.com/pre-commit/pre-commit-hooks.git
|
||||||
rev: v4.0.1
|
rev: v4.5.0
|
||||||
hooks:
|
hooks:
|
||||||
- id: check-json
|
- id: check-json
|
||||||
name: Check JSON files
|
name: Check JSON files
|
||||||
@@ -29,17 +33,20 @@ repos:
|
|||||||
args: ["--fix=lf"]
|
args: ["--fix=lf"]
|
||||||
exclude: |
|
exclude: |
|
||||||
(?x)^(
|
(?x)^(
|
||||||
compile_commands.json |
|
src/webui/www/private/css/lib/.* |
|
||||||
src/webui/www/private/scripts/lib/.*
|
src/webui/www/private/scripts/lib/.* |
|
||||||
|
dist/windows/license.txt |
|
||||||
|
test/testdata/crlf.txt
|
||||||
)$
|
)$
|
||||||
|
|
||||||
- id: end-of-file-fixer
|
- id: end-of-file-fixer
|
||||||
name: Check trailing newlines
|
name: Check trailing newlines
|
||||||
exclude: |
|
exclude: |
|
||||||
(?x)^(
|
(?x)^(
|
||||||
compile_commands.json |
|
|
||||||
configure |
|
configure |
|
||||||
src/webui/www/private/scripts/lib/.*
|
src/webui/www/private/css/lib/.* |
|
||||||
|
src/webui/www/private/scripts/lib/.* |
|
||||||
|
test/testdata/crlf.txt
|
||||||
)$
|
)$
|
||||||
exclude_types:
|
exclude_types:
|
||||||
- svg
|
- svg
|
||||||
@@ -49,7 +56,54 @@ repos:
|
|||||||
name: Check trailing whitespaces
|
name: Check trailing whitespaces
|
||||||
exclude: |
|
exclude: |
|
||||||
(?x)^(
|
(?x)^(
|
||||||
|
src/webui/www/private/css/lib/.* |
|
||||||
src/webui/www/private/scripts/lib/.*
|
src/webui/www/private/scripts/lib/.*
|
||||||
)$
|
)$
|
||||||
exclude_types:
|
exclude_types:
|
||||||
- ts
|
- ts
|
||||||
|
|
||||||
|
- repo: https://github.com/codespell-project/codespell.git
|
||||||
|
rev: v2.2.6
|
||||||
|
hooks:
|
||||||
|
- id: codespell
|
||||||
|
name: Check spelling (codespell)
|
||||||
|
args: ["--ignore-words-list", "additionals,curren,fo,ist,ket,searchin,superseeding,te,ths"]
|
||||||
|
exclude: |
|
||||||
|
(?x)^(
|
||||||
|
.*\.desktop |
|
||||||
|
.*\.qrc |
|
||||||
|
build-aux/.* |
|
||||||
|
Changelog |
|
||||||
|
dist/windows/installer-translations/.* |
|
||||||
|
m4/.* |
|
||||||
|
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.16.18
|
||||||
|
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 |
|
||||||
|
build-aux/.* |
|
||||||
|
Changelog |
|
||||||
|
configure.* |
|
||||||
|
dist/windows/installer-translations/.* |
|
||||||
|
m4/.* |
|
||||||
|
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,27 +1,24 @@
|
|||||||
[main]
|
[main]
|
||||||
host = https://www.transifex.com
|
host = https://www.transifex.com
|
||||||
|
|
||||||
[qbittorrent.qbittorrent_master]
|
[o:sledgehammer999:p:qbittorrent:r:qbittorrent_v50x]
|
||||||
file_filter = src/lang/qbittorrent_<lang>.ts
|
file_filter = src/lang/qbittorrent_<lang>.ts
|
||||||
lang_map = pt: pt_PT
|
source_file = src/lang/qbittorrent_en.ts
|
||||||
source_file = src/lang/qbittorrent_en.ts
|
source_lang = en
|
||||||
source_lang = en
|
type = QT
|
||||||
type = QT
|
|
||||||
minimum_perc = 23
|
minimum_perc = 23
|
||||||
mode = developer
|
lang_map = pt: pt_PT, zh: zh_CN
|
||||||
|
|
||||||
[qbittorrent.qbittorrentdesktop_master]
|
[o:sledgehammer999:p:qbittorrent:r:qbittorrent_webui_v50x]
|
||||||
source_file = dist/unix/org.qbittorrent.qBittorrent.desktop
|
file_filter = src/webui/www/translations/webui_<lang>.ts
|
||||||
source_lang = en
|
source_file = src/webui/www/translations/webui_en.ts
|
||||||
type = DESKTOP
|
source_lang = en
|
||||||
|
type = QT
|
||||||
minimum_perc = 23
|
minimum_perc = 23
|
||||||
mode = developer
|
lang_map = pt: pt_PT, zh: zh_CN
|
||||||
|
|
||||||
[qbittorrent.qbittorrent_webui]
|
[o:sledgehammer999:p:qbittorrent:r:qbittorrentdesktop_master]
|
||||||
file_filter = src/webui/www/translations/webui_<lang>.ts
|
source_file = dist/unix/org.qbittorrent.qBittorrent.desktop
|
||||||
lang_map = pt: pt_PT
|
source_lang = en
|
||||||
source_file = src/webui/www/translations/webui_en.ts
|
type = DESKTOP
|
||||||
source_lang = en
|
|
||||||
type = QT
|
|
||||||
minimum_perc = 23
|
minimum_perc = 23
|
||||||
mode = developer
|
|
||||||
|
87
AUTHORS
87
AUTHORS
@@ -29,73 +29,66 @@ Code from other projects:
|
|||||||
copyright: Dan Haim <negativeiq@users.sourceforge.net>
|
copyright: Dan Haim <negativeiq@users.sourceforge.net>
|
||||||
license: BSD
|
license: BSD
|
||||||
|
|
||||||
* file src/app/stacktrace.h
|
* files src/webui/www/private/css/lib/vanillaSelectBox.css src/webui/www/private/scripts/lib/vanillaSelectBox.js
|
||||||
copyright: Timo Bingmann from http://idlebox.net/
|
copyright: Philippe Meyer <pmg.meyer@gmail.com>
|
||||||
license: WTFPL v2.0
|
license: MIT
|
||||||
|
|
||||||
* file src/app/stacktrace_win.h
|
|
||||||
copyright: Quassel Project
|
|
||||||
license: GPLv2/3
|
|
||||||
|
|
||||||
Images Authors:
|
Images Authors:
|
||||||
* files: src/icons/skin/qbittorrent-tray.svg (and related pngs)
|
* files: src/icons/qbittorrent-tray.svg
|
||||||
copyright: Provided by HVS <hvs linuxmail org> (raster first proposal) and Atif Afzal(@atfzl github) <atif5801@gmail.com> (vectorized and modified)
|
copyright: Provided by HVS <hvs linuxmail org> (raster first proposal) and Atif Afzal(@atfzl github) <atif5801@gmail.com> (vectorized and modified)
|
||||||
license: GPLv2+
|
license: GPLv2+
|
||||||
|
|
||||||
* files: src/qbittorrent_file.ico src/icons/fileicon.svg
|
* files: src/qbittorrent_file.ico src/icons/fileicon.svg
|
||||||
copyright: 'uknown.svg' (LGPLv3+) from Oxygen Icon Theme was used as base which was slightly modified and 'qbittorrent-tray.svg' (GPLv2+) was overlayed above it.
|
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.
|
||||||
license: GPLv3+
|
license: GPLv3+
|
||||||
|
|
||||||
* files: src/icons/*.png
|
|
||||||
copyright: Gnome Icon Theme
|
|
||||||
license: GPLv2
|
|
||||||
url: http://ftp.acc.umu.se/pub/GNOME/sources/gnome-icon-theme
|
|
||||||
|
|
||||||
* files: src/oxygen/*.png
|
|
||||||
copyright: Oxygen Icon Theme (KDE)
|
|
||||||
license: LGPL
|
|
||||||
url: http://www.oxygen-icons.org
|
|
||||||
|
|
||||||
* files: src/icons/flags/*.svg
|
* files: src/icons/flags/*.svg
|
||||||
copyright: lipis/flag-icon-css
|
copyright: lipis/flag-icons
|
||||||
license: MIT
|
license: MIT
|
||||||
url: https://github.com/lipis/flag-icon-css/
|
url: https://github.com/lipis/flag-icons/
|
||||||
|
|
||||||
* files: src/icons/skin/*.png
|
* file: src/webui/www/private/images/tabs.gif
|
||||||
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>
|
copyright: Greg Houston <gregory.houston@gmail.com>
|
||||||
license: MIT
|
license: MIT
|
||||||
|
|
||||||
* file: src/icons/skin/qbittorrent_mono*
|
* file: src/icons/qbittorrent-tray-dark.svg src/icons/qbittorrent-tray-light.svg
|
||||||
copyright: Daniel Eguren <deguren@gmail.com>
|
copyright: Daniel Eguren <deguren@gmail.com>
|
||||||
|
modified by: now-im <now-im.d8gcu@simplelogin.com> (@now-im)
|
||||||
license: LGPL
|
license: LGPL
|
||||||
|
|
||||||
* file: src/search_engine/engines/btjunkie.png
|
* folder: src/icons/
|
||||||
copyright: Downloaded from btjunkie.org
|
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/isohunt.png
|
* folder: src/icons/
|
||||||
copyright: Downloaded from isohunt.com
|
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/mininova.png
|
* folder: src/icons/
|
||||||
copyright: Downloaded from mininova.org
|
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/piratebay.png
|
* folder: src/icons/
|
||||||
copyright: Downloaded from thepiratebay.org
|
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
|
||||||
* file: src/search_engine/engines/torrentreactor.png
|
copyright: now-im <now-im.d8gcu@simplelogin.com> (@now-im)
|
||||||
copyright: Downloaded from torrentreactor.net
|
license: BSD 2-Clause License
|
||||||
|
|
||||||
* file: src/icons/oxygen/checked.png
|
|
||||||
copyright: Victor Buinsky <allok.victor@gmail.com>
|
|
||||||
|
|
||||||
* file: src/icons/skin/ratio.png
|
|
||||||
copyright: Fatcow Web Hosting
|
|
||||||
license: Creative Commons Attribution 3.0 License
|
|
||||||
url: http://www.fatcow.com/free-icons
|
|
||||||
|
|
||||||
Translations authors:
|
Translations authors:
|
||||||
* files: src/lang/*.ts
|
* files: src/lang/*.ts
|
||||||
|
@@ -1,61 +1,49 @@
|
|||||||
cmake_minimum_required(VERSION 3.16 FATAL_ERROR) # Policies <= CMP0097 default to NEW
|
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
|
project(qBittorrent
|
||||||
DESCRIPTION "The qBittorrent BitTorrent client"
|
DESCRIPTION "The qBittorrent BitTorrent client"
|
||||||
HOMEPAGE_URL "https://www.qbittorrent.org/"
|
HOMEPAGE_URL "https://www.qbittorrent.org/"
|
||||||
LANGUAGES CXX
|
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
|
# version requirements - older versions may work, but you are on your own
|
||||||
set(minBoostVersion 1.65)
|
set(minBoostVersion 1.76)
|
||||||
set(minQt5Version 5.15.2)
|
set(minQt6Version 6.5.0)
|
||||||
set(minQt6Version 6.2)
|
set(minOpenSSLVersion 3.0.2)
|
||||||
set(minOpenSSLVersion 1.1.1)
|
set(minLibtorrent1Version 1.2.19)
|
||||||
set(minLibtorrent1Version 1.2.14)
|
set(minLibtorrentVersion 2.0.10)
|
||||||
set(minLibtorrentVersion 2.0.4)
|
|
||||||
set(minZlibVersion 1.2.11)
|
set(minZlibVersion 1.2.11)
|
||||||
|
|
||||||
# features (some are platform-specific)
|
include(GNUInstallDirs)
|
||||||
include(CheckCXXSourceCompiles) # TODO: migrate to CheckSourceCompiles in CMake >= 3.19
|
|
||||||
|
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules)
|
||||||
include(FeatureSummary)
|
include(FeatureSummary)
|
||||||
include(FeatureOptionsSetup)
|
include(FeatureOptionsSetup)
|
||||||
feature_option(QT6 "Use Qt6" OFF)
|
|
||||||
feature_option(STACKTRACE "Enable stacktraces" ON)
|
# features, list is loosely sorted by user's interests
|
||||||
feature_option(GUI "Build GUI application" ON)
|
feature_option(GUI "Build GUI application" ON)
|
||||||
feature_option(WEBUI "Enables built-in HTTP server for headless use" 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(VERBOSE_CONFIGURE "Show information about PACKAGES_FOUND and PACKAGES_NOT_FOUND in the configure output (only useful for debugging the CMake build scripts)" OFF)
|
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")
|
|
||||||
|
if (CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
|
||||||
feature_option_dependent(DBUS
|
feature_option_dependent(DBUS
|
||||||
"Enables support for notifications and power-management features on Linux via D-Bus"
|
"Enable support for notifications and power-management features via D-Bus"
|
||||||
ON "GUI" OFF
|
ON "GUI" OFF
|
||||||
)
|
)
|
||||||
feature_option_dependent(SYSTEMD
|
|
||||||
"Install systemd service file to a directory manually overridable with Systemd_SERVICES_INSTALL_DIR"
|
|
||||||
OFF "NOT GUI" OFF
|
|
||||||
)
|
|
||||||
if (STACKTRACE)
|
|
||||||
check_cxx_source_compiles(
|
|
||||||
"#include <execinfo.h>
|
|
||||||
int main(){return 0;}"
|
|
||||||
QBITTORRENT_HAS_EXECINFO_H
|
|
||||||
)
|
|
||||||
if (NOT QBITTORRENT_HAS_EXECINFO_H)
|
|
||||||
message(FATAL_ERROR "execinfo.h header file not found.\n"
|
|
||||||
"Please either disable the STACKTRACE feature or use a libc that has this header file, such as glibc (GNU libc)."
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
elseif (MSVC)
|
|
||||||
feature_option(MSVC_RUNTIME_DYNAMIC "Use MSVC dynamic runtime library (-MD) instead of static (-MT)" ON)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
include(GNUInstallDirs)
|
if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||||||
add_subdirectory(src)
|
feature_option_dependent(SYSTEMD
|
||||||
add_subdirectory(dist)
|
"Install systemd service file. Target directory is overridable with `SYSTEMD_SERVICES_INSTALL_DIR` variable"
|
||||||
|
OFF "NOT GUI" OFF
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (MSVC)
|
||||||
|
feature_option(MSVC_RUNTIME_DYNAMIC "Use MSVC dynamic runtime library (-MD) instead of static (-MT)" ON)
|
||||||
|
endif()
|
||||||
|
|
||||||
if (VERBOSE_CONFIGURE)
|
if (VERBOSE_CONFIGURE)
|
||||||
feature_summary(WHAT ALL)
|
feature_summary(WHAT ALL)
|
||||||
@@ -63,5 +51,17 @@ else()
|
|||||||
feature_summary(WHAT ENABLED_FEATURES DISABLED_FEATURES)
|
feature_summary(WHAT ENABLED_FEATURES DISABLED_FEATURES)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# go check the packages
|
||||||
|
include(CheckPackages)
|
||||||
|
# configure for specific platform
|
||||||
|
include(CommonConfig)
|
||||||
|
|
||||||
# Generate version header
|
# Generate version header
|
||||||
configure_file("src/base/version.h.in" "${CMAKE_CURRENT_SOURCE_DIR}/src/base/version.h" @ONLY)
|
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()
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
# Coding Guidelines
|
# Coding Guidelines
|
||||||
|
|
||||||
All new code **must** follow the following coding guidelines. \
|
All new code **must** follow the following coding guidelines.
|
||||||
|
|
||||||
If you make changes in a file that still uses another coding style, make sure that you follow these guidelines for your changes. \
|
If you make changes in a file that still uses another coding style, make sure that you follow these guidelines for your changes. \
|
||||||
For programming languages other than C++ (e.g. JavaScript) used in this repository and submodules, unless otherwise specified, coding guidelines listed here applies as much as possible.
|
For programming languages other than C++ (e.g. JavaScript) used in this repository and submodules, unless otherwise specified, coding guidelines listed here applies as much as possible.
|
||||||
|
|
||||||
@@ -275,7 +276,7 @@ struct StructName {};
|
|||||||
|
|
||||||
enum EnumName {};
|
enum EnumName {};
|
||||||
|
|
||||||
typedef QList<ClassName> SomeList;
|
using SomeList = QList<ClassName>;
|
||||||
|
|
||||||
namespace NamespaceName
|
namespace NamespaceName
|
||||||
{
|
{
|
||||||
@@ -317,7 +318,7 @@ The headers should be ordered alphabetically within each group. \
|
|||||||
If there are conditionals for the same header group, then put them at the bottom of the respective group. \
|
If there are conditionals for the same header group, then put them at the bottom of the respective group. \
|
||||||
If there are conditionals that contain headers from several different header groups, then put them above the "qBittorrent's own headers" group.
|
If there are conditionals that contain headers from several different header groups, then put them above the "qBittorrent's own headers" group.
|
||||||
|
|
||||||
One exception is the header containing the library version (for example, QtGlobal), this particular header isn't constrained by the aforementioned order.
|
One exception is the header containing the library version (for example, QtVersionChecks), this particular header isn't constrained by the aforementioned order.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
@@ -330,7 +331,7 @@ Example:
|
|||||||
// exceptions, headers containing version number
|
// exceptions, headers containing version number
|
||||||
#include <boost/version.hpp>
|
#include <boost/version.hpp>
|
||||||
#include <libtorrent/version.hpp>
|
#include <libtorrent/version.hpp>
|
||||||
#include <QtGlobal>
|
#include <QtVersionChecks>
|
||||||
|
|
||||||
// C++ Standard Library headers
|
// C++ Standard Library headers
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
@@ -341,7 +342,7 @@ Example:
|
|||||||
|
|
||||||
// System headers
|
// System headers
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
#include <Windows.h>
|
#include <windows.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Boost library headers
|
// Boost library headers
|
||||||
@@ -456,8 +457,8 @@ class ExampleWidget : public QWidget
|
|||||||
* Prefer pre-increment, pre-decrement operators
|
* Prefer pre-increment, pre-decrement operators
|
||||||
|
|
||||||
```c++
|
```c++
|
||||||
++i, --j; // Yes
|
++i, --j; // yes
|
||||||
i++, j--; // No
|
i++, j--; // no
|
||||||
```
|
```
|
||||||
|
|
||||||
* private/public/protected must not be indented
|
* private/public/protected must not be indented
|
||||||
|
@@ -23,7 +23,7 @@ Read the respective section to find out more.
|
|||||||
|
|
||||||
* **Be patient.** The development team is small and resource limited. Developers and contributors take from their free time to analyze the problem and fix the issue. :clock3:
|
* **Be patient.** The development team is small and resource limited. Developers and contributors take from their free time to analyze the problem and fix the issue. :clock3:
|
||||||
|
|
||||||
* Harsh words or threats won't help your situation. What's worse, your complain will (very likely) be **ignored.** :fearful:
|
* Harsh words or threats won't help your situation. Your complaint will (very likely) be **ignored.** :fearful:
|
||||||
|
|
||||||
# Submitting an issue/bug report
|
# Submitting an issue/bug report
|
||||||
|
|
||||||
@@ -39,7 +39,7 @@ Developers and contributors are not supposed to deal with issues for which littl
|
|||||||
|
|
||||||
Positive contributions are those which are reported with efforts to find the actual cause of an issue, or at the very least efforts were made to narrow it as much as possible.
|
Positive contributions are those which are reported with efforts to find the actual cause of an issue, or at the very least efforts were made to narrow it as much as possible.
|
||||||
|
|
||||||
Requiring people to investigate as much as possible before opening an issue will more than likely avoid burdening the project with invalid issues or issues unrelated to qBittorrent.
|
Requiring people to investigate as much as possible before opening an issue avoids burdening the project with invalid issues or issues unrelated to qBittorrent.
|
||||||
|
|
||||||
The following are _not_ bug reports. **Check the [wiki][wiki-url], [forum][forum-url] or other places for help and support for issues like these**:
|
The following are _not_ bug reports. **Check the [wiki][wiki-url], [forum][forum-url] or other places for help and support for issues like these**:
|
||||||
|
|
||||||
@@ -200,7 +200,7 @@ Following these guidelines helps maintainers and the community understand your s
|
|||||||
[coding-guidelines-url]: https://github.com/qbittorrent/qBittorrent/blob/master/CODING_GUIDELINES.md
|
[coding-guidelines-url]: https://github.com/qbittorrent/qBittorrent/blob/master/CODING_GUIDELINES.md
|
||||||
[coding-guidelines-git-commit-message-url]: https://github.com/qbittorrent/qBittorrent/blob/master/CODING_GUIDELINES.md#10-git-commit-message
|
[coding-guidelines-git-commit-message-url]: https://github.com/qbittorrent/qBittorrent/blob/master/CODING_GUIDELINES.md#10-git-commit-message
|
||||||
[commit-message-fix-issue-example-url]: https://github.com/qbittorrent/qBittorrent/commit/c07cd440cd46345297debb47cb260f8688975f50
|
[commit-message-fix-issue-example-url]: https://github.com/qbittorrent/qBittorrent/commit/c07cd440cd46345297debb47cb260f8688975f50
|
||||||
[forum-url]: http://forum.qbittorrent.org/
|
[forum-url]: https://forum.qbittorrent.org/
|
||||||
[howto-report-bugs-url]: https://www.chiark.greenend.org.uk/~sgtatham/bugs.html
|
[howto-report-bugs-url]: https://www.chiark.greenend.org.uk/~sgtatham/bugs.html
|
||||||
[how-to-translate-url]: https://github.com/qbittorrent/qBittorrent/wiki/How-to-translate-qBittorrent
|
[how-to-translate-url]: https://github.com/qbittorrent/qBittorrent/wiki/How-to-translate-qBittorrent
|
||||||
[merging-vs-rebasing-url]: https://www.atlassian.com/git/tutorials/merging-vs-rebasing
|
[merging-vs-rebasing-url]: https://www.atlassian.com/git/tutorials/merging-vs-rebasing
|
||||||
|
339
COPYING.GPLv2
Normal file
339
COPYING.GPLv2
Normal file
File diff suppressed because it is too large
Load Diff
674
COPYING.GPLv3
Normal file
674
COPYING.GPLv3
Normal file
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user