Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1d24941ed5 | ||
|
|
6e5ed9270e | ||
|
|
5805720416 | ||
|
|
572edbd634 | ||
|
|
2a42f6cae0 | ||
|
|
8348afca8e | ||
|
|
23cb16e8b4 | ||
|
|
81f4f591f5 | ||
|
|
8e7885c7f6 | ||
|
|
03c4e872c0 | ||
|
|
9b65e5be73 | ||
|
|
9547dd3711 | ||
|
|
abf49ce756 | ||
|
|
6bf2f34fca | ||
|
|
2ea74498ed | ||
|
|
7004c679f2 | ||
|
|
c9de3f2ce0 | ||
|
|
f77d4f6d59 | ||
|
|
89b9a32168 | ||
|
|
357b766369 | ||
|
|
45a8ba18a6 | ||
|
|
0e0f8f72b2 | ||
|
|
dc5f8f7631 | ||
|
|
3a32b1eae6 | ||
|
|
7bf7e31459 | ||
|
|
c931867c4a | ||
|
|
a2c0eb646f | ||
|
|
8a03585611 | ||
|
|
74d9e35b37 | ||
|
|
1ae2d41378 | ||
|
|
070603b0fe | ||
|
|
9e3daf494f | ||
|
|
8f47b5cedf | ||
|
|
646ad029f0 | ||
|
|
d47963247d | ||
|
|
4f7add046c | ||
|
|
61ec9af5e3 | ||
|
|
412dc92b10 | ||
|
|
04dab3dcd6 | ||
|
|
c51f885253 | ||
|
|
aa7e20fee9 | ||
|
|
480b99b1e7 | ||
|
|
0a4367b1da | ||
|
|
39daca9d22 | ||
|
|
d614e25792 | ||
|
|
30209d0c99 | ||
|
|
e1c44feb01 | ||
|
|
5af8f4ede1 | ||
|
|
e11604fd62 | ||
|
|
a2e8d9087e | ||
|
|
edf268dc0f | ||
|
|
e03ea59f3c | ||
|
|
f0b2840668 | ||
|
|
4f2fc49475 | ||
|
|
2e4155bbfc | ||
|
|
ca2456cbc6 | ||
|
|
222b4868f5 | ||
|
|
2cf1f7e833 | ||
|
|
776d24695e | ||
|
|
64a9c6e5d7 | ||
|
|
66196013bc | ||
|
|
61ff308c9f | ||
|
|
2672f9b087 | ||
|
|
4315a75a12 | ||
|
|
15905bebb1 | ||
|
|
fc4a7454ad | ||
|
|
87410aea50 | ||
|
|
de98d00a1c | ||
|
|
e94ffd9d79 | ||
|
|
d7aebb784d | ||
|
|
20b8cb939d | ||
|
|
ff4217c3d1 | ||
|
|
4fb72d30d8 | ||
|
|
d2b8fc0bda | ||
|
|
951181628a | ||
|
|
ccee274847 | ||
|
|
967f6728ef | ||
|
|
bf11ffb626 | ||
|
|
c12cabbe4e | ||
|
|
e997594db9 | ||
|
|
6f5e3b395f | ||
|
|
8bf2caf20d | ||
|
|
040021ee0e | ||
|
|
5018a3a848 | ||
|
|
df1c74a91d | ||
|
|
bb3893d36c | ||
|
|
fe57449f6c | ||
|
|
c725adaa09 | ||
|
|
7731bfa4e0 | ||
|
|
e72546aaec | ||
|
|
d6d648f0f4 | ||
|
|
56fddd56f5 | ||
|
|
3c9c350bc0 | ||
|
|
8340a04bd6 | ||
|
|
ccef70fd3d | ||
|
|
0650fa7bbe | ||
|
|
5cffa06385 | ||
|
|
4df17a151e | ||
|
|
c8e314b690 | ||
|
|
3d91f3c235 | ||
|
|
32cd536ada | ||
|
|
0ba523d071 | ||
|
|
314171b2b1 | ||
|
|
909309cc2e | ||
|
|
32b6de0c3a | ||
|
|
7e22e7b67d | ||
|
|
36f0d7450c | ||
|
|
73d958911f | ||
|
|
6b4a2b5406 | ||
|
|
cd8d1c9b10 | ||
|
|
a79fedda77 | ||
|
|
558ef7fbdf | ||
|
|
7c6609a414 | ||
|
|
54514f494f | ||
|
|
67aa7ca79f | ||
|
|
344f5af01b | ||
|
|
8150d6c48c | ||
|
|
05ee0dbdb5 | ||
|
|
2db3076c92 | ||
|
|
90daed18df | ||
|
|
65dd2c645a | ||
|
|
89d70a940c | ||
|
|
4944517a0e | ||
|
|
2a7ee7f0b2 | ||
|
|
6edbd47c9a | ||
|
|
d755c39e4a | ||
|
|
b7f8327209 | ||
|
|
27c82d8411 | ||
|
|
e0b159c069 | ||
|
|
cfb19820fa | ||
|
|
e05ca13608 | ||
|
|
15cf96c01f | ||
|
|
2caec91a0f | ||
|
|
9465a1e0a8 | ||
|
|
251272c708 | ||
|
|
f068a0e0fa | ||
|
|
d0034cd112 | ||
|
|
ae6d5ebeef | ||
|
|
8466e70424 | ||
|
|
c3d8f27f48 | ||
|
|
b85229f1a1 | ||
|
|
d03298a048 | ||
|
|
798e0b487e | ||
|
|
49444d72b4 | ||
|
|
c0e0fe4dcb | ||
|
|
9a189848ea | ||
|
|
96b09bfc1d | ||
|
|
9a6c913d89 | ||
|
|
42010594be | ||
|
|
5469c30b75 | ||
|
|
fe9a2ee202 | ||
|
|
5e27dc7e9f | ||
|
|
69d083e3c0 | ||
|
|
2b95f9724e | ||
|
|
4066a07892 | ||
|
|
443ab58f65 | ||
|
|
e0116acbe4 | ||
|
|
91e9bf0207 | ||
|
|
aff0335f7e | ||
|
|
4d8baaa19b | ||
|
|
65452d80f1 | ||
|
|
df4d432151 | ||
|
|
1390f2c783 | ||
|
|
be99d0e900 | ||
|
|
97fcf1d5fc | ||
|
|
c9b14d7c45 | ||
|
|
3d0dda0347 | ||
|
|
8d69b35d67 | ||
|
|
7ba142a9f2 | ||
|
|
56ac55806d | ||
|
|
47f53c14db | ||
|
|
a47d40b914 | ||
|
|
be33ae30bb | ||
|
|
6d5f1306bf | ||
|
|
ad3dc716e7 | ||
|
|
089b125a89 | ||
|
|
dfd4554a11 | ||
|
|
1b98297881 | ||
|
|
cacc8fcafe | ||
|
|
ac07d39db8 | ||
|
|
e27aa77cec | ||
|
|
cbc9f68dd6 | ||
|
|
944d0f5a70 | ||
|
|
9ded7ef830 | ||
|
|
adb18b7ce3 | ||
|
|
8220e60257 | ||
|
|
b09af655e7 | ||
|
|
5833f8a3d8 | ||
|
|
72132d5e88 | ||
|
|
4167c4db78 | ||
|
|
3e1f6b9137 | ||
|
|
bb08b19c0d | ||
|
|
7497919e8f | ||
|
|
41cbe7b31c | ||
|
|
425e951341 | ||
|
|
2e4a0b92fc | ||
|
|
9f839579e2 | ||
|
|
900066b9d4 | ||
|
|
97534b0670 | ||
|
|
62672ade04 | ||
|
|
b22e1c1ccc | ||
|
|
1b8e60c26d | ||
|
|
035dfdd332 | ||
|
|
d1707d3c72 | ||
|
|
c9bed097ba | ||
|
|
5acb90025f | ||
|
|
2d12da79b0 | ||
|
|
bede379021 | ||
|
|
38acde1b20 | ||
|
|
d0c4a5addd | ||
|
|
b8a7ccf005 | ||
|
|
68fc53585e | ||
|
|
26afc125c7 | ||
|
|
090b39f78b | ||
|
|
3722de6b13 | ||
|
|
d93c9aa780 | ||
|
|
ea56504aee | ||
|
|
46b91edfdf | ||
|
|
d2dfde519d | ||
|
|
1eac56f22c | ||
|
|
fb491a6bb2 | ||
|
|
3da7c89b66 | ||
|
|
e842cf3a57 | ||
|
|
85b0e8f1a6 | ||
|
|
b8e03ff6c1 | ||
|
|
54b1703d67 | ||
|
|
15d647a0ec | ||
|
|
353558ddb3 | ||
|
|
9f58d30050 | ||
|
|
4f0632cdf1 | ||
|
|
ff8ba71948 | ||
|
|
a367591327 | ||
|
|
c91925fbc2 | ||
|
|
479f1649ef | ||
|
|
06f69184b6 | ||
|
|
3471d9a57c | ||
|
|
28d4035477 | ||
|
|
3e1d151efd | ||
|
|
556cfc3036 | ||
|
|
c49b757be6 | ||
|
|
cec7e2caf3 | ||
|
|
9a0c07a461 | ||
|
|
c7064c18b9 | ||
|
|
fb897310c8 | ||
|
|
5944849326 | ||
|
|
1255f1e6c7 | ||
|
|
d7bc09d859 | ||
|
|
f84a448351 | ||
|
|
7e34690e0c | ||
|
|
6f6d378600 | ||
|
|
216b463b8f | ||
|
|
4ad84cb5e5 | ||
|
|
19e0946717 | ||
|
|
0de1ad06cd | ||
|
|
72427006dd | ||
|
|
0e5f702651 | ||
|
|
4f1b0fc838 | ||
|
|
23d0963c2d | ||
|
|
dcb35fb80f | ||
|
|
b1768854c3 | ||
|
|
4ed4eaf8e8 | ||
|
|
d167b53b17 | ||
|
|
18eff80a30 | ||
|
|
a44ec5f624 | ||
|
|
5da518f50e | ||
|
|
ebb11a8ac5 | ||
|
|
dd9c5db1aa | ||
|
|
984ac9763e | ||
|
|
ad67af2f8f | ||
|
|
cc8460d366 | ||
|
|
1dc9b9c956 | ||
|
|
20b552ad9d | ||
|
|
12f4885ad7 | ||
|
|
9c1fdef286 | ||
|
|
c125a154da | ||
|
|
028d768b23 | ||
|
|
42972e01b0 | ||
|
|
1bd37af7d0 | ||
|
|
5fad2d0c02 | ||
|
|
bd9adeb795 | ||
|
|
5fd3c7c9d9 | ||
|
|
937184429f | ||
|
|
e31ccff3f8 | ||
|
|
edaafba7eb | ||
|
|
87018fa7fe | ||
|
|
8fcec519d0 | ||
|
|
aa52236c01 | ||
|
|
cd5b61d9d0 | ||
|
|
4eefdd6011 | ||
|
|
21748b3133 | ||
|
|
e7db202f88 | ||
|
|
a93e76eaf4 | ||
|
|
3c5bdb2ab2 | ||
|
|
8f7c40caf1 | ||
|
|
150ad62771 | ||
|
|
5e3715dc31 | ||
|
|
05648ba8e3 | ||
|
|
0956471a10 | ||
|
|
1f79e62f53 | ||
|
|
c123e93704 | ||
|
|
e49333340f | ||
|
|
7210f16dfc | ||
|
|
2825e992df | ||
|
|
8e8f534c21 | ||
|
|
d3d5ac905c | ||
|
|
4cca23a283 | ||
|
|
0f3fffc728 | ||
|
|
7261d8637d | ||
|
|
8a1e82986a | ||
|
|
e8d421b3df | ||
|
|
cb2c09b2ba | ||
|
|
a14026f0d1 | ||
|
|
e237df31f4 | ||
|
|
a9421c63a9 | ||
|
|
4f2938d957 | ||
|
|
8fa9d3678b | ||
|
|
4bbc23c185 | ||
|
|
73733e4176 | ||
|
|
9f8faf0a6e | ||
|
|
5ff704459c | ||
|
|
0ccc730d85 | ||
|
|
093ffe791e | ||
|
|
b9ff051043 | ||
|
|
10b6d5927b | ||
|
|
0052b6589e | ||
|
|
51e9ac15df | ||
|
|
4df579e0d3 | ||
|
|
2cf69d2e67 | ||
|
|
64bffd0dc8 | ||
|
|
b451240dfd | ||
|
|
41cc1f617f | ||
|
|
ed671eac25 | ||
|
|
9f2529adb6 | ||
|
|
3903d7b9e5 | ||
|
|
ec4d698021 | ||
|
|
da06c71389 | ||
|
|
0f508bf438 | ||
|
|
97dd7c5d57 | ||
|
|
78219bf9e1 | ||
|
|
1c30cbfab1 | ||
|
|
ac33dc5250 | ||
|
|
8de5db18d6 | ||
|
|
913aa49df4 | ||
|
|
5e4633ee53 | ||
|
|
30e573d87a | ||
|
|
9e91d60bb1 | ||
|
|
069652a5f1 | ||
|
|
ab1e25bfb1 | ||
|
|
862aa0ede5 | ||
|
|
f75c27c843 | ||
|
|
687b5fb40d | ||
|
|
bb36651548 | ||
|
|
65a2702294 | ||
|
|
94bcb57118 | ||
|
|
17856a97e4 | ||
|
|
d4926030b8 | ||
|
|
432a43d7c2 | ||
|
|
62232ee9db | ||
|
|
4be98bd3b8 | ||
|
|
ab2b95b502 | ||
|
|
718858a8ca | ||
|
|
89e1160b12 | ||
|
|
808976eefe | ||
|
|
ee735b80d5 | ||
|
|
7a1317a803 | ||
|
|
dac1cbfe30 | ||
|
|
0ca099c1a0 | ||
|
|
f01211ae2e | ||
|
|
7c23a48ef8 | ||
|
|
89f20a93e0 | ||
|
|
f3fd7fd2b3 | ||
|
|
10940a37dd | ||
|
|
8249be816a | ||
|
|
05f8b4d4b3 | ||
|
|
935c35fd43 | ||
|
|
33b18cb48d | ||
|
|
d9442d6e94 | ||
|
|
b9ac55fe7f | ||
|
|
ca558e7fa2 | ||
|
|
08f367fef0 | ||
|
|
ca5c94f75e | ||
|
|
6f4e5f95a6 | ||
|
|
2defd0ed42 | ||
|
|
86aca30744 | ||
|
|
d5f7299a8e | ||
|
|
e73a5d4c8b | ||
|
|
ec18c95d32 | ||
|
|
d9557c7da1 | ||
|
|
fc90fd41be | ||
|
|
ec5e38d1f9 | ||
|
|
0eb4d08daa | ||
|
|
4b365132ce | ||
|
|
a5ff902ae2 | ||
|
|
bd874540bb | ||
|
|
f6e1af5701 | ||
|
|
e2bfc9b7c9 | ||
|
|
5f3f91bf1c | ||
|
|
6527c08e4d | ||
|
|
a57104469d | ||
|
|
94f450ba67 | ||
|
|
b9e4113c81 | ||
|
|
65707f53b7 | ||
|
|
21c73e699b | ||
|
|
63226a7267 | ||
|
|
fb37810367 | ||
|
|
2b66734fa6 | ||
|
|
380aae139f | ||
|
|
e4e823c4d6 | ||
|
|
d4b16d5866 | ||
|
|
b9cfd9a9f9 | ||
|
|
664aa150fb | ||
|
|
aead92d9e4 | ||
|
|
7cc5d14045 | ||
|
|
33fce2af2a | ||
|
|
d26fbb6e89 | ||
|
|
cd93fe3b0e | ||
|
|
1208449322 | ||
|
|
a11ec3a05b | ||
|
|
e39dfcf00c | ||
|
|
5f1e0fe7d8 | ||
|
|
57d0d92ecb | ||
|
|
cf89d80765 | ||
|
|
758722ddeb | ||
|
|
182adba83c | ||
|
|
3c880216cf | ||
|
|
e854153b88 | ||
|
|
416b8449b9 | ||
|
|
394de09cb1 | ||
|
|
5213669fbc | ||
|
|
8471e2feac | ||
|
|
dd53a92ecf | ||
|
|
0ff4c3608e | ||
|
|
909854ae12 | ||
|
|
725da0065b | ||
|
|
c8801dd5d3 | ||
|
|
80c59795d7 | ||
|
|
b1f74094f1 | ||
|
|
255089a0a5 | ||
|
|
7c24c1137d | ||
|
|
7138a8f397 | ||
|
|
b32f6522ac | ||
|
|
b7e4548d2a | ||
|
|
0cfb63f301 | ||
|
|
e90b68967c | ||
|
|
0155b07c9d | ||
|
|
592d74e788 | ||
|
|
854a913911 | ||
|
|
48b551b188 | ||
|
|
9e808c57b4 | ||
|
|
896a761e24 | ||
|
|
96af9bdde6 | ||
|
|
e90f0188c1 | ||
|
|
0ab7eb7207 | ||
|
|
81dcdbe648 | ||
|
|
f4090cb0e5 | ||
|
|
0f5dfb147e | ||
|
|
0bcd369426 | ||
|
|
b316d4a281 | ||
|
|
86ab0135ce | ||
|
|
2d42d4e181 | ||
|
|
23e6313e2f | ||
|
|
b5c5810913 | ||
|
|
b5ebba4521 | ||
|
|
4fe8e273e4 | ||
|
|
12d8f5e69c | ||
|
|
8a1cf3080e | ||
|
|
b9bd0ed61c | ||
|
|
1f33ed8034 | ||
|
|
38f38cd2c4 | ||
|
|
71478a0262 | ||
|
|
f76f2cd94c | ||
|
|
183b134817 | ||
|
|
6a7d2012a5 | ||
|
|
7762d689f8 | ||
|
|
f2ee361b3a | ||
|
|
a0345c831a | ||
|
|
61c4a7f3eb | ||
|
|
7fc7eaa847 | ||
|
|
7bb2331f43 | ||
|
|
e373000cdb | ||
|
|
a228110583 | ||
|
|
6ae1956b2a | ||
|
|
a8a879f2a0 | ||
|
|
7e113cdec2 | ||
|
|
f9111c1107 | ||
|
|
1fdd7f3804 | ||
|
|
288fa3caf7 | ||
|
|
27e9b4933d | ||
|
|
c43915d609 | ||
|
|
989ecc5a23 | ||
|
|
a225af6d71 | ||
|
|
d2407c39c7 | ||
|
|
4754cf3927 | ||
|
|
b23c1a73ca | ||
|
|
4cebe2ac8b | ||
|
|
44431d2c10 | ||
|
|
14a1ac0dfb | ||
|
|
166542f1e3 | ||
|
|
05f4bf382d | ||
|
|
52af960175 | ||
|
|
a2e2bdf803 | ||
|
|
3baa5d92f4 | ||
|
|
99f97b82a6 | ||
|
|
6d1e7da475 | ||
|
|
81ad7c5816 | ||
|
|
84544a5e91 | ||
|
|
7ece6faaad | ||
|
|
031018a29e | ||
|
|
0f036383b2 | ||
|
|
c0e5ef79ec | ||
|
|
0aa6c26490 | ||
|
|
a11687e3eb | ||
|
|
f676aa56e6 | ||
|
|
a53802cfef | ||
|
|
b47c45d4cc | ||
|
|
f2354a7fa2 | ||
|
|
ca043be197 | ||
|
|
50346683a1 | ||
|
|
43374f4fae | ||
|
|
5e86f363ed | ||
|
|
d9be0a7b1c | ||
|
|
f3086fa389 | ||
|
|
0523b0639b | ||
|
|
1a32bff274 | ||
|
|
349d7f4c55 | ||
|
|
734d194cb0 | ||
|
|
5983befd5b | ||
|
|
e63e68dfde | ||
|
|
1ef81951b7 | ||
|
|
395ccb0706 | ||
|
|
b3f692f00c | ||
|
|
64c2fd4e51 | ||
|
|
dd698ecab4 | ||
|
|
b93bad9859 | ||
|
|
733f932b78 | ||
|
|
50d99e1314 | ||
|
|
90b7d7c5a1 | ||
|
|
7e422e10a6 | ||
|
|
2bf32fc770 | ||
|
|
3e095c3c33 | ||
|
|
3445d946bc | ||
|
|
7578928199 | ||
|
|
428127ef40 | ||
|
|
e3f932aa6b | ||
|
|
7cfa3b3513 | ||
|
|
81c691491c | ||
|
|
c361602b1a | ||
|
|
99b969067e | ||
|
|
6e8b750c68 | ||
|
|
df37b44cc8 | ||
|
|
9548be0cec | ||
|
|
588e27b456 | ||
|
|
7032d0c6b7 | ||
|
|
72e9a99315 | ||
|
|
3cff6742f5 | ||
|
|
6a02f578b6 | ||
|
|
e62769b361 | ||
|
|
9df9776238 | ||
|
|
4beabb6bf5 | ||
|
|
10d5bb91ab | ||
|
|
7c9c615aed | ||
|
|
fd48c97209 | ||
|
|
e58bf2be22 | ||
|
|
dc6453e230 | ||
|
|
b3a0288fd9 | ||
|
|
9c86f18982 | ||
|
|
1bf0140652 | ||
|
|
bb72f8afab | ||
|
|
bb11c4676b | ||
|
|
32fe3e54f1 | ||
|
|
9d2187ca4d | ||
|
|
0e94432c24 | ||
|
|
c4890d157a | ||
|
|
ef2befa698 | ||
|
|
5f9ce549f8 | ||
|
|
cb435f0d15 | ||
|
|
105e259f2c | ||
|
|
51bf0c3fe0 | ||
|
|
e6311a5fe7 | ||
|
|
2c90c14d72 | ||
|
|
6c9aeac36f | ||
|
|
48f7693eac | ||
|
|
71d3ba576f | ||
|
|
067670bd01 | ||
|
|
610d6fa1c0 | ||
|
|
5d6fa503c9 | ||
|
|
375e747014 | ||
|
|
5cab7be8a9 | ||
|
|
4808d83b26 | ||
|
|
c4951a06f3 | ||
|
|
bd418160e1 | ||
|
|
90a3d6d839 | ||
|
|
e2511e8be1 | ||
|
|
33e1403b98 | ||
|
|
596a134ef3 | ||
|
|
1ae7e50c88 | ||
|
|
922595d68c | ||
|
|
618aecd349 | ||
|
|
3ed66f9945 | ||
|
|
4284cb76c1 | ||
|
|
b7693e75ec | ||
|
|
c15b352c4b | ||
|
|
cf8aeba53e | ||
|
|
ff75d73b92 | ||
|
|
d7986d603f | ||
|
|
672fe041cc | ||
|
|
91485465c9 | ||
|
|
1c39d7b9ad | ||
|
|
54105f3816 | ||
|
|
69b007f849 | ||
|
|
118ac25059 | ||
|
|
9ee8a53b9c | ||
|
|
e407ef6c47 | ||
|
|
0935799f7d | ||
|
|
fac15811c2 | ||
|
|
d89f632850 | ||
|
|
b7804fd7eb | ||
|
|
95e40bbe5e | ||
|
|
3a680cf6b4 | ||
|
|
314dfbbd75 | ||
|
|
aed21ffcae | ||
|
|
a79d34bcc0 | ||
|
|
eebe11b95b | ||
|
|
42993c8c9b | ||
|
|
2598f3732c | ||
|
|
5204a6b672 | ||
|
|
155a20115c | ||
|
|
ab0e84257a | ||
|
|
b2fd66e4c4 | ||
|
|
66d0549938 | ||
|
|
498497171b | ||
|
|
b731d3fb18 | ||
|
|
0081d5c492 | ||
|
|
ccdc9d4992 | ||
|
|
45105590fe | ||
|
|
149863fdca | ||
|
|
be7b5e62be | ||
|
|
1b66b136dc | ||
|
|
4b188192f8 | ||
|
|
743bf334d4 | ||
|
|
1c5bf9d6b1 | ||
|
|
8b344e8bfe | ||
|
|
44019bcab2 | ||
|
|
52f547ae13 | ||
|
|
c7311009dc | ||
|
|
1b1855b14e | ||
|
|
6c699ac07b | ||
|
|
d379bb138c | ||
|
|
76796f5f23 | ||
|
|
796c572292 | ||
|
|
931dddcf0e | ||
|
|
2713270e1f | ||
|
|
2705d21f6e | ||
|
|
6b6869e327 | ||
|
|
97fc9c7061 | ||
|
|
c928568a92 | ||
|
|
78fe710b97 | ||
|
|
2ed22b3081 | ||
|
|
3ad30c4775 | ||
|
|
fe5033ea6d | ||
|
|
b6ec7d2981 | ||
|
|
42de1c8e60 | ||
|
|
5dcd4151db | ||
|
|
275e5504f8 | ||
|
|
f53e2a21ba | ||
|
|
e58d128c73 | ||
|
|
4b919721b1 | ||
|
|
391c4c1a24 | ||
|
|
acb8d2f539 | ||
|
|
a459d0a086 | ||
|
|
e3fb5b27f5 | ||
|
|
60ade26bda | ||
|
|
6cbbcf06b0 | ||
|
|
58394d555e | ||
|
|
7e8a830fda | ||
|
|
19a19b4237 | ||
|
|
fcaedd41ce | ||
|
|
e4e5689bc5 | ||
|
|
5080c3b1d2 | ||
|
|
3d450a3b33 | ||
|
|
faf55e0d06 | ||
|
|
ee40f3842b | ||
|
|
cc9b1e249a | ||
|
|
3c2b0a8986 | ||
|
|
724211362b | ||
|
|
e4b8c641b1 | ||
|
|
3f0b936694 | ||
|
|
3ef7768696 | ||
|
|
e2cb540ee9 | ||
|
|
bcd2b15ee4 | ||
|
|
f66a68b3fd | ||
|
|
e060d57bae | ||
|
|
0796b96908 | ||
|
|
184bfd2f69 | ||
|
|
e3f624d2bb | ||
|
|
e2db0ec3e5 | ||
|
|
7b0d574752 | ||
|
|
9e42c0dcc4 | ||
|
|
a8f68e22dd | ||
|
|
5d5219566f | ||
|
|
5e4f408235 | ||
|
|
3d6b2485d1 | ||
|
|
e8f4044f8c | ||
|
|
10f6b4913e | ||
|
|
7568c73062 | ||
|
|
6ce7de23a3 | ||
|
|
dbc517de99 | ||
|
|
e214c76bdf | ||
|
|
3ccd8c44b3 | ||
|
|
5df6f68cd9 | ||
|
|
45d4025ad7 | ||
|
|
f6b78bd167 | ||
|
|
17f239e6fc | ||
|
|
fcf00ebd8f | ||
|
|
e347fdc899 | ||
|
|
b419804ddb | ||
|
|
bdfabcf800 | ||
|
|
ebf695abdf | ||
|
|
bc2b1bd509 | ||
|
|
8642d8bde4 | ||
|
|
01e890eb3f | ||
|
|
7af8f069e7 | ||
|
|
b5db1685da | ||
|
|
335a8f4d6b | ||
|
|
e316413f60 | ||
|
|
e8ca0a1213 | ||
|
|
15d918f1fb | ||
|
|
329a641adf | ||
|
|
9bdf654cbc | ||
|
|
1a920ba955 | ||
|
|
afc490aa18 | ||
|
|
0a5c95c6b4 | ||
|
|
a078d00eef | ||
|
|
18632bc5fd | ||
|
|
f90783c298 | ||
|
|
643ea9c7fb | ||
|
|
39aa63057e | ||
|
|
5d4eec3b71 | ||
|
|
6bd7a309b3 | ||
|
|
dd452f82ff | ||
|
|
cb0fd33089 | ||
|
|
ee107621c4 | ||
|
|
54de067a13 | ||
|
|
ae50735311 | ||
|
|
97cbe98b3d | ||
|
|
eb112f9cd7 | ||
|
|
6025195234 | ||
|
|
7fd8e5455d | ||
|
|
e424d9325c | ||
|
|
78754ff194 | ||
|
|
242f4a6dec | ||
|
|
5460855ea4 | ||
|
|
605ca4da04 | ||
|
|
ebb9aa48ae | ||
|
|
99b93d1b71 | ||
|
|
ef87b569d7 | ||
|
|
3872c4fcdf | ||
|
|
09a4d3923a | ||
|
|
6df8a98fa0 | ||
|
|
a6af143ba7 | ||
|
|
287afb4b1d | ||
|
|
eb677e412c | ||
|
|
3853343918 | ||
|
|
fe55334f5c | ||
|
|
7ff4cb9b8a | ||
|
|
7143aec20d | ||
|
|
65d399fa5b | ||
|
|
8ce3787429 | ||
|
|
c4c5964588 | ||
|
|
2d61db57ef | ||
|
|
a9d8ffe3fe | ||
|
|
ab21af908c | ||
|
|
fffbe5228c | ||
|
|
87ec58f9d3 | ||
|
|
805baea90b | ||
|
|
91238d99ae | ||
|
|
d5561a21e3 | ||
|
|
f78ae92419 | ||
|
|
cbb233ad06 | ||
|
|
07571330ba | ||
|
|
0e48187238 | ||
|
|
e32574ed9b | ||
|
|
a41e8a0f5d | ||
|
|
c20a6424e5 | ||
|
|
f5a4d8f84b | ||
|
|
6f97c060b3 | ||
|
|
2bfd96c9e0 | ||
|
|
c815a4629c | ||
|
|
41f140c971 | ||
|
|
89b0bc667b | ||
|
|
d8cbab3bfc | ||
|
|
5a5daf153e | ||
|
|
bf4782d3e1 | ||
|
|
4ba03065bc | ||
|
|
747a1dca97 | ||
|
|
16f2c6cc0d | ||
|
|
b569d24cd1 | ||
|
|
7f4ffdb1e5 | ||
|
|
60c05710b1 | ||
|
|
3e59822753 | ||
|
|
47a9729737 | ||
|
|
3f31d9bd5a | ||
|
|
95538794e3 | ||
|
|
371b1caaa6 | ||
|
|
64909893e7 | ||
|
|
815f1c810e | ||
|
|
1f031d8966 | ||
|
|
2a4aa2f8ac | ||
|
|
d646607066 | ||
|
|
c37b45308e | ||
|
|
2cec6a6778 | ||
|
|
a4c635ee52 | ||
|
|
4fc859d9ef | ||
|
|
f945e3c292 | ||
|
|
37d8126128 | ||
|
|
86ab733de0 | ||
|
|
95d87732c4 | ||
|
|
8338e701b4 | ||
|
|
a384b8e295 | ||
|
|
019f591627 | ||
|
|
8cbfb29a49 | ||
|
|
12470fd954 | ||
|
|
fd9cd61991 | ||
|
|
4a40af7eda | ||
|
|
58eed1682c | ||
|
|
481e7f78bc | ||
|
|
34de343fa6 | ||
|
|
1c4fd1d02d | ||
|
|
4c3b8cbec7 | ||
|
|
727d08519a | ||
|
|
bb796bb364 | ||
|
|
b413762457 | ||
|
|
45ef0fcd26 | ||
|
|
eaef68f827 | ||
|
|
5c4b04615d | ||
|
|
b77690d046 | ||
|
|
49c97108e5 | ||
|
|
14e15fa79d | ||
|
|
fc3e36e255 | ||
|
|
3bbce082de | ||
|
|
de7807bc6a | ||
|
|
45b9de5ff6 | ||
|
|
63808bebde | ||
|
|
4927413bcb | ||
|
|
c3c814b28d | ||
|
|
e0d22f7f6a | ||
|
|
2a24686f29 | ||
|
|
be97bc30e3 | ||
|
|
c23d1d493f | ||
|
|
74934de4b8 | ||
|
|
6efe62e277 | ||
|
|
ae2757c515 | ||
|
|
c55b46e67f | ||
|
|
15eae4f606 | ||
|
|
a1b339eecf | ||
|
|
ba892240cb | ||
|
|
173d10f336 | ||
|
|
14b08d1001 | ||
|
|
b52a2ca4cf | ||
|
|
b512c215a4 | ||
|
|
3e2268b391 | ||
|
|
874ea99492 | ||
|
|
20b0aab470 | ||
|
|
4c3e9ffad4 | ||
|
|
a8db164ef7 | ||
|
|
f5feb7a0de | ||
|
|
fdd3664a6e | ||
|
|
9fdc5cdf28 | ||
|
|
e9cf931714 | ||
|
|
9b2cf3de43 | ||
|
|
7f9920554e | ||
|
|
0e3322d4a8 | ||
|
|
3a5fc95725 | ||
|
|
b7496a4732 | ||
|
|
6fd191f32d | ||
|
|
eba86758f2 | ||
|
|
7fa5e6db3c | ||
|
|
f678491eb3 | ||
|
|
b1f3bf85c4 | ||
|
|
0117092f83 | ||
|
|
8ea9bffba2 | ||
|
|
12d805fad4 | ||
|
|
2742b62ef1 | ||
|
|
0872d3b445 | ||
|
|
e654bfd127 | ||
|
|
6f493ed47e | ||
|
|
2028a21d14 | ||
|
|
08d0b25619 | ||
|
|
eba4edf7a7 | ||
|
|
f8e1536336 | ||
|
|
8b90555511 | ||
|
|
f32b8534a4 | ||
|
|
26453a8ad4 | ||
|
|
98f1e8af57 | ||
|
|
ce597da1a3 | ||
|
|
dba80a5a9e | ||
|
|
3c94112aeb | ||
|
|
855b892b1e | ||
|
|
22b74dc70b | ||
|
|
014ba9e868 | ||
|
|
11f3beae8b | ||
|
|
ac1065bfa6 | ||
|
|
84501d087c | ||
|
|
60f2b53866 | ||
|
|
c9e8d24e06 | ||
|
|
2436c3bad1 | ||
|
|
32358a876b | ||
|
|
a05c596e48 | ||
|
|
b2d8336dd0 | ||
|
|
cfdc275a88 | ||
|
|
2dd2d18ade | ||
|
|
3d9a92787b | ||
|
|
9acec081a4 | ||
|
|
6d101c4e10 | ||
|
|
09e9e7314b | ||
|
|
a86dc5ae85 | ||
|
|
bb70bcb4e3 | ||
|
|
c86701ee3c | ||
|
|
01ec120536 | ||
|
|
f734f230fd | ||
|
|
5c7697a765 | ||
|
|
ca7340530d | ||
|
|
9aceea0134 | ||
|
|
7df778fc71 | ||
|
|
e855b9f160 | ||
|
|
54428e9e40 | ||
|
|
a975ddc80a | ||
|
|
b128a7ca59 | ||
|
|
3dd54d5fea | ||
|
|
45ef2da0ac | ||
|
|
6491dc1bde | ||
|
|
1eee70ff9b | ||
|
|
e77aca2037 | ||
|
|
981cf94719 | ||
|
|
0550fb90c5 | ||
|
|
8cf9f8ba9d | ||
|
|
1eb61cfd24 | ||
|
|
75d54e25e9 | ||
|
|
930e91834f | ||
|
|
8ad1394f1a | ||
|
|
a53ac4479b | ||
|
|
bd707e7514 | ||
|
|
eafc9ec997 | ||
|
|
9a8b3fc232 | ||
|
|
fda50f0ff3 | ||
|
|
65411b8ccb | ||
|
|
5c7991e873 | ||
|
|
f42157fdd7 | ||
|
|
f80c3adfe0 | ||
|
|
1c8db65b20 | ||
|
|
1e21f2b148 | ||
|
|
629f0d6502 | ||
|
|
b69edb7936 | ||
|
|
c49d8e4d44 | ||
|
|
045134fcff | ||
|
|
9e9a0be80d | ||
|
|
0dd25cb631 | ||
|
|
eb46631a7d | ||
|
|
0074a8ba1e | ||
|
|
e187252afd | ||
|
|
0349e44856 | ||
|
|
d8985e9f91 | ||
|
|
4a70ae125d | ||
|
|
0b785c8e59 | ||
|
|
ae303db62b | ||
|
|
45300a233b | ||
|
|
65f417cf7d | ||
|
|
07322293f3 | ||
|
|
3efd975d2f | ||
|
|
c9ddfc086c | ||
|
|
fb952dd209 | ||
|
|
572e2173c3 | ||
|
|
752b10273b | ||
|
|
9aba312c8e | ||
|
|
983ae5337b | ||
|
|
0fd51e5c8a | ||
|
|
f58785c2e0 | ||
|
|
3d030a96b7 | ||
|
|
2ecf1c18fb | ||
|
|
eae5a209d3 | ||
|
|
78a00b5b88 | ||
|
|
1ac688ec19 | ||
|
|
b9bc65e3c2 | ||
|
|
3d8d3958ea | ||
|
|
1567062636 | ||
|
|
b09e6a5405 | ||
|
|
89a8f3eb0a | ||
|
|
b90a9a3357 | ||
|
|
fe4abe7d85 | ||
|
|
a650916105 | ||
|
|
4f294f4eae | ||
|
|
3ad525533d | ||
|
|
6979dce7e8 | ||
|
|
6f1f82a7fb | ||
|
|
3290f15439 | ||
|
|
0a737c4d72 | ||
|
|
8025884e3b | ||
|
|
a8a7627161 | ||
|
|
18e4b74d0b | ||
|
|
614bbd1a0b | ||
|
|
c4d4dd1e5a | ||
|
|
6055170b19 | ||
|
|
b30ee02353 | ||
|
|
8b22990eba | ||
|
|
f402699512 | ||
|
|
8606e505d1 | ||
|
|
eeee22c914 | ||
|
|
0f4420b8c7 | ||
|
|
d2140e4cec | ||
|
|
872c5d6572 | ||
|
|
11b11c9166 | ||
|
|
995cba88ff | ||
|
|
92a35ea3e9 | ||
|
|
c22d141237 | ||
|
|
415066345a | ||
|
|
81a669a199 | ||
|
|
ffa7afd09c | ||
|
|
dab682f90d | ||
|
|
35740637df | ||
|
|
57fb1eb27b | ||
|
|
069c6a3f81 | ||
|
|
61da248c41 | ||
|
|
0f36b273f1 | ||
|
|
770922cdda | ||
|
|
343ad0ffd5 | ||
|
|
e134a99e12 | ||
|
|
f8139d094a | ||
|
|
1e8efcdc5a | ||
|
|
81abfe3175 | ||
|
|
ffe8a9f7a6 | ||
|
|
2da635c048 | ||
|
|
83ed374b99 | ||
|
|
9837ef901b | ||
|
|
01e48bc074 | ||
|
|
49c0299d68 | ||
|
|
4a8e17e80e | ||
|
|
8c8912c651 | ||
|
|
8be35d2a30 | ||
|
|
2a4612672a | ||
|
|
a98cb3606f | ||
|
|
20056cb9c4 | ||
|
|
1e36865bb3 | ||
|
|
306aef3ef9 | ||
|
|
f5ebe3efc8 | ||
|
|
2bbe9dccc6 | ||
|
|
2723d49b3a | ||
|
|
87b9e52719 | ||
|
|
bfe13386c5 | ||
|
|
766299a15c | ||
|
|
fe30e00bc1 | ||
|
|
0dcc35df8f | ||
|
|
e8f9ea0784 | ||
|
|
76fdce8576 | ||
|
|
72dfc10b1b | ||
|
|
c472a4ccd6 | ||
|
|
74c09bdebc | ||
|
|
56e1c402f6 | ||
|
|
b1e7155c6d | ||
|
|
7dd47dbd2e | ||
|
|
e5673e9a7b | ||
|
|
8abc95205a | ||
|
|
d8a8e6ce73 | ||
|
|
e44e801e3a | ||
|
|
5170e037b5 | ||
|
|
b121fa7287 | ||
|
|
29ac0f9ee6 | ||
|
|
1fb1865aca | ||
|
|
d314856f82 | ||
|
|
0a0dbd384c | ||
|
|
3ef9540a57 | ||
|
|
84647201b1 | ||
|
|
f31ef7cfe2 | ||
|
|
9af54f5ed7 | ||
|
|
5788bd90e2 | ||
|
|
729b1eb8de | ||
|
|
9a92fa33a8 | ||
|
|
5c8f50a9f5 | ||
|
|
56845a64d9 | ||
|
|
36a369fac8 | ||
|
|
a5d1dfe81f | ||
|
|
946a39c361 | ||
|
|
3710da43c9 | ||
|
|
a9f8e1e897 | ||
|
|
9e46407e89 | ||
|
|
e1b4e18153 | ||
|
|
01104844e8 | ||
|
|
d1e1ef3a82 | ||
|
|
907211a733 | ||
|
|
dec2aff37d | ||
|
|
4bd67e4933 | ||
|
|
328c85e6b3 | ||
|
|
c7b5ce0346 | ||
|
|
ca92d14db6 | ||
|
|
e0bae25136 | ||
|
|
1b23b5b7a6 | ||
|
|
9bdbeffeb0 | ||
|
|
6c17f4bc16 | ||
|
|
d0d6a573a7 | ||
|
|
8c9f193114 | ||
|
|
5bac77f6bb | ||
|
|
e815b1d6ae | ||
|
|
1406eec197 | ||
|
|
5e73127f9a | ||
|
|
541ee90d27 | ||
|
|
d330d6d537 | ||
|
|
5b28ae17cf | ||
|
|
af2678a3a0 | ||
|
|
3a8a9332d6 | ||
|
|
2bce91de0b | ||
|
|
7b3a9dd30f | ||
|
|
1f7ed3f1cb | ||
|
|
db3fd73d09 | ||
|
|
7d83394e35 | ||
|
|
f880dacdd7 | ||
|
|
b48376c370 | ||
|
|
e0c1796035 | ||
|
|
ffc9af18be | ||
|
|
7c2b94eee8 | ||
|
|
d5a8479294 | ||
|
|
29f614b7b7 | ||
|
|
98d813a00b | ||
|
|
a2b35c289c | ||
|
|
2d3e1f8122 | ||
|
|
537167cd61 | ||
|
|
004786655c | ||
|
|
1ee2433b28 | ||
|
|
eb7a15dc9d | ||
|
|
5f8dcd286e | ||
|
|
4cfe5274b5 | ||
|
|
f6613cbad1 | ||
|
|
3806b33aab | ||
|
|
fa3c7c9059 | ||
|
|
c0c0b2ec4c | ||
|
|
d553862e52 | ||
|
|
7cbd905fae | ||
|
|
49e23b7df5 | ||
|
|
bf529ba1ff | ||
|
|
aa0b271aa9 | ||
|
|
1584764809 | ||
|
|
31130197eb | ||
|
|
723d8759ff | ||
|
|
667a56ca6c | ||
|
|
c009c30211 | ||
|
|
b6094244ac | ||
|
|
2741c40580 | ||
|
|
c90f3c659a | ||
|
|
e78251ee29 | ||
|
|
b960f62d2a | ||
|
|
dc76c2ea37 | ||
|
|
6e5149fbe6 | ||
|
|
4008d94571 | ||
|
|
1729cfcb3f | ||
|
|
1226224858 | ||
|
|
f3855583dd | ||
|
|
8b5358fbcc | ||
|
|
d4d2483161 | ||
|
|
361308962e | ||
|
|
e0c8409971 | ||
|
|
6f31e33094 | ||
|
|
bad5eab21c | ||
|
|
c9ec0527dd | ||
|
|
ac3ce1ceac | ||
|
|
6fffdba876 | ||
|
|
94789a9100 | ||
|
|
1475d02be0 | ||
|
|
08d357dc98 | ||
|
|
0df299acf5 | ||
|
|
00eb2de4c8 | ||
|
|
f65f350965 | ||
|
|
1d32aed8dc | ||
|
|
ab3bdf219f | ||
|
|
5b1a58195e | ||
|
|
7f5d92addb | ||
|
|
7a37918ec7 | ||
|
|
31e198f772 | ||
|
|
366039eb2b | ||
|
|
fd83f3636d | ||
|
|
c2e8507402 | ||
|
|
3923bd915c | ||
|
|
d1163a4ee8 | ||
|
|
5538e738a8 | ||
|
|
b0a9f34dc4 | ||
|
|
65ca665e25 | ||
|
|
72b9560c32 | ||
|
|
7694d4dd18 | ||
|
|
853c16a9bc | ||
|
|
905cc2f22e | ||
|
|
edbe5c405c | ||
|
|
07bd2d4c13 | ||
|
|
d57f66ef75 | ||
|
|
19ecc6a284 | ||
|
|
2b6fc7dbe5 | ||
|
|
8d76d94131 | ||
|
|
246bcd06a2 | ||
|
|
e4f1b20211 | ||
|
|
ef5d8c482a | ||
|
|
c346055b42 | ||
|
|
63fd0dc103 | ||
|
|
7f05fda41a | ||
|
|
9c691db910 | ||
|
|
d7966a7234 | ||
|
|
e70c50ab1a | ||
|
|
74c16fabe6 | ||
|
|
70d5113180 | ||
|
|
6b089d3fba | ||
|
|
03ab236b67 | ||
|
|
8ba068041d | ||
|
|
fae83a34bc | ||
|
|
b934b1b940 | ||
|
|
7f7fd71fe4 | ||
|
|
d65cef176e | ||
|
|
5715245080 | ||
|
|
796c991dd8 | ||
|
|
7ac74220c4 | ||
|
|
1bb0451d75 | ||
|
|
ea4ef5be90 | ||
|
|
131691156a | ||
|
|
864bf5e059 | ||
|
|
5596c8825b | ||
|
|
a05c064466 | ||
|
|
ae86a8db0f | ||
|
|
dae5eadf1a | ||
|
|
bc11f40a7a | ||
|
|
51fd0fca91 | ||
|
|
3c0a4e4995 | ||
|
|
9959cf1f24 | ||
|
|
61669f6b98 | ||
|
|
d7d29a843f | ||
|
|
dbb9168426 | ||
|
|
cd52ebd7e8 | ||
|
|
99e20751a8 | ||
|
|
01108d7c2f | ||
|
|
7e5ca51486 | ||
|
|
5441ab1a58 | ||
|
|
0c34c94397 | ||
|
|
a5f97fc018 | ||
|
|
91cdc28846 | ||
|
|
2470954006 |
No files matched your search
@@ -0,0 +1,132 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Report a problem with ZoiteChat
|
||||
title: "[Bug]: "
|
||||
labels: bug
|
||||
assignees: ""
|
||||
---
|
||||
|
||||
```
|
||||
+------------------------------------------------------------+
|
||||
| ZoiteChat Bug Report |
|
||||
| Please fill this out so the bug goblin has enough crumbs. |
|
||||
+------------------------------------------------------------+
|
||||
```
|
||||
|
||||
## Summary
|
||||
|
||||
What went wrong?
|
||||
|
||||
```text
|
||||
Describe the bug clearly and briefly.
|
||||
```
|
||||
|
||||
## Steps to Reproduce
|
||||
|
||||
```text
|
||||
1.
|
||||
2.
|
||||
3.
|
||||
4.
|
||||
```
|
||||
|
||||
## Expected Result
|
||||
|
||||
```text
|
||||
What should have happened?
|
||||
```
|
||||
|
||||
## Actual Result
|
||||
|
||||
```text
|
||||
What happened instead?
|
||||
```
|
||||
|
||||
## ZoiteChat Version
|
||||
|
||||
```text
|
||||
ZoiteChat version:
|
||||
Build/source: GitHub release / Fedora package / source build / Windows installer / other
|
||||
Commit hash, if built from source:
|
||||
```
|
||||
|
||||
## System Information
|
||||
|
||||
```text
|
||||
OS:
|
||||
OS version:
|
||||
Desktop environment:
|
||||
Display server: Wayland / X11 / Windows / other
|
||||
CPU architecture: x86_64 / aarch64 / other
|
||||
```
|
||||
|
||||
## IRC / Network Details
|
||||
|
||||
```text
|
||||
IRC network/server:
|
||||
Port:
|
||||
TLS/SSL enabled: yes / no
|
||||
SASL enabled: yes / no
|
||||
Using bouncer/ZNC: yes / no
|
||||
Proxy/VPN involved: yes / no
|
||||
IRCv3 capabilities involved, if known:
|
||||
```
|
||||
|
||||
## Plugins, Scripts, and Config
|
||||
|
||||
```text
|
||||
Plugins enabled:
|
||||
Scripts loaded:
|
||||
Theme/custom CSS:
|
||||
Custom config changes:
|
||||
Does the bug still happen with a clean config? yes / no / untested
|
||||
```
|
||||
|
||||
## Logs / Terminal Output
|
||||
|
||||
Paste relevant output below.
|
||||
|
||||
```text
|
||||
```
|
||||
|
||||
## Raw IRC Lines, If Relevant
|
||||
|
||||
Remove passwords, tokens, IPs, private channels, private messages, certs, and account details before posting.
|
||||
|
||||
```text
|
||||
```
|
||||
|
||||
## Crash Details, If Relevant
|
||||
|
||||
```text
|
||||
Did ZoiteChat crash? yes / no
|
||||
Crash reporter output:
|
||||
Backtrace:
|
||||
Core dump available: yes / no
|
||||
```
|
||||
|
||||
## Screenshots
|
||||
|
||||
Attach screenshots or screen recordings if the issue is visual.
|
||||
|
||||
## Regression Check
|
||||
|
||||
```text
|
||||
Did this work in an older version? yes / no / unknown
|
||||
Last known working version:
|
||||
First broken version:
|
||||
```
|
||||
|
||||
## Checklist
|
||||
|
||||
* [ ] I searched existing issues first.
|
||||
* [ ] I tested with the latest ZoiteChat version available to me.
|
||||
* [ ] I included steps to reproduce the issue.
|
||||
* [ ] I removed private information from logs and raw IRC lines.
|
||||
* [ ] I included system and network details where relevant.
|
||||
|
||||
## Extra Notes
|
||||
|
||||
```text
|
||||
Anything else that might help.
|
||||
```
|
||||
@@ -0,0 +1 @@
|
||||
blank_issues_enabled: false
|
||||
@@ -0,0 +1,57 @@
|
||||
---
|
||||
name: Feature request
|
||||
about: Suggest an improvement for ZoiteChat
|
||||
title: "[Feature]: "
|
||||
labels: enhancement
|
||||
assignees: ""
|
||||
---
|
||||
|
||||
## Summary
|
||||
|
||||
```text
|
||||
Describe the feature or enhancement clearly and briefly.
|
||||
```
|
||||
|
||||
## Problem
|
||||
|
||||
```text
|
||||
What problem would this solve?
|
||||
```
|
||||
|
||||
## Proposed Solution
|
||||
|
||||
```text
|
||||
How should ZoiteChat behave?
|
||||
```
|
||||
|
||||
## Alternatives Considered
|
||||
|
||||
```text
|
||||
Other approaches or workarounds you considered.
|
||||
```
|
||||
|
||||
## Use Case
|
||||
|
||||
```text
|
||||
Who benefits from this, and when would they use it?
|
||||
```
|
||||
|
||||
## Platform Details
|
||||
|
||||
```text
|
||||
OS:
|
||||
ZoiteChat version:
|
||||
Build/source: GitHub release / Fedora package / source build / Windows installer / other
|
||||
```
|
||||
|
||||
## Checklist
|
||||
|
||||
* [ ] I searched existing issues first.
|
||||
* [ ] I checked whether this already exists in the latest ZoiteChat version available to me.
|
||||
* [ ] I explained the problem this would solve.
|
||||
|
||||
## Extra Notes
|
||||
|
||||
```text
|
||||
Anything else that might help.
|
||||
```
|
||||
@@ -0,0 +1,37 @@
|
||||
|
||||
version: 2
|
||||
|
||||
updates:
|
||||
# Flatpak shared modules
|
||||
- package-ecosystem: "gitsubmodule"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
day: "monday"
|
||||
open-pull-requests-limit: 2
|
||||
labels:
|
||||
- "dependencies"
|
||||
|
||||
# GitHub Actions dependencies
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
day: "monday"
|
||||
open-pull-requests-limit: 3
|
||||
labels:
|
||||
- "dependencies"
|
||||
|
||||
commit-message:
|
||||
prefix: "ci"
|
||||
|
||||
cooldown:
|
||||
default-days: 7
|
||||
|
||||
groups:
|
||||
actions-minor-patch:
|
||||
patterns:
|
||||
- "*"
|
||||
update-types:
|
||||
- "minor"
|
||||
- "patch"
|
||||
@@ -2,13 +2,13 @@ name: AppImage Build
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [master]
|
||||
branches: [master, 'release/**']
|
||||
pull_request:
|
||||
branches: [master]
|
||||
|
||||
jobs:
|
||||
appimage_build:
|
||||
runs-on: ubuntu-24.04
|
||||
runs-on: ubuntu-22.04
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
@@ -17,7 +17,7 @@ jobs:
|
||||
artifact-metadata: write
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v7
|
||||
with:
|
||||
submodules: true
|
||||
|
||||
@@ -28,11 +28,15 @@ jobs:
|
||||
sudo apt-get install -y --no-install-recommends \
|
||||
build-essential pkg-config meson ninja-build cmake \
|
||||
gettext \
|
||||
libcanberra-dev libdbus-glib-1-dev libglib2.0-dev \
|
||||
libgtk2.0-dev libgtk-3-dev \
|
||||
libgtk-3-bin libglib2.0-bin shared-mime-info gsettings-desktop-schemas \
|
||||
libluajit-5.1-dev libpci-dev libperl-dev libssl-dev \
|
||||
python3-dev python3-cffi mono-devel desktop-file-utils \
|
||||
libcanberra-dev libglib2.0-dev \
|
||||
libarchive-dev \
|
||||
libgtk-3-dev libfontconfig1-dev libpango1.0-dev xvfb xauth dbus-daemon at-spi2-core \
|
||||
libwayland-client0 libwayland-cursor0 libwayland-egl1 \
|
||||
libxkbcommon0 \
|
||||
libgtk-3-bin libglib2.0-bin glib-networking shared-mime-info gsettings-desktop-schemas \
|
||||
liblua5.4-dev libpci-dev libperl-dev libssl-dev libayatana-appindicator3-dev \
|
||||
perl python3 python3-minimal python3-dev python3-cffi python3-sphinx mono-devel desktop-file-utils \
|
||||
breeze-gtk-theme \
|
||||
patchelf file curl
|
||||
|
||||
- name: Configure
|
||||
@@ -41,22 +45,122 @@ jobs:
|
||||
rm -rf build
|
||||
meson setup build \
|
||||
--prefix=/usr \
|
||||
-Dinstall-docs=true \
|
||||
-Dtext-frontend=true \
|
||||
-Dwith-perl=perl \
|
||||
-Dwith-python=python3 \
|
||||
-Dauto_features=enabled
|
||||
-Dauto_features=enabled \
|
||||
-Dappindicator=enabled
|
||||
|
||||
- name: Build
|
||||
run: |
|
||||
set -eux
|
||||
ninja -C build
|
||||
|
||||
- name: Test emoji catalog, font coverage and picker
|
||||
run: xvfb-run -a dbus-run-session -- meson test -C build --print-errorlogs "Emoji Data Tests" "Emoji Font Tests" "Emoji UI Tests"
|
||||
|
||||
- name: Install to AppDir
|
||||
run: |
|
||||
set -eux
|
||||
rm -rf AppDir
|
||||
DESTDIR="${PWD}/AppDir" ninja -C build install
|
||||
|
||||
- name: Bundle scripting runtimes in AppDir
|
||||
run: |
|
||||
set -eux
|
||||
|
||||
python3_version="$(python3 -c 'import sys; print(f"{sys.version_info.major}.{sys.version_info.minor}")')"
|
||||
|
||||
install -Dm755 "$(command -v python3)" "AppDir/usr/bin/python3"
|
||||
if [ -x "/usr/bin/perl" ]; then
|
||||
install -Dm755 /usr/bin/perl AppDir/usr/bin/perl
|
||||
fi
|
||||
|
||||
install -d AppDir/usr/lib
|
||||
cp -a "/usr/lib/python${python3_version}" "AppDir/usr/lib/"
|
||||
|
||||
if [ -d "/usr/lib/python3/dist-packages" ]; then
|
||||
install -d AppDir/usr/lib/python3
|
||||
cp -a /usr/lib/python3/dist-packages AppDir/usr/lib/python3/
|
||||
fi
|
||||
|
||||
if [ -d "/usr/lib/x86_64-linux-gnu/python3/dist-packages" ]; then
|
||||
install -d AppDir/usr/lib/x86_64-linux-gnu/python3
|
||||
cp -a /usr/lib/x86_64-linux-gnu/python3/dist-packages AppDir/usr/lib/x86_64-linux-gnu/python3/
|
||||
fi
|
||||
|
||||
if [ -d "/usr/lib/x86_64-linux-gnu/perl-base" ]; then
|
||||
install -d AppDir/usr/lib/x86_64-linux-gnu
|
||||
cp -a /usr/lib/x86_64-linux-gnu/perl-base AppDir/usr/lib/x86_64-linux-gnu/
|
||||
fi
|
||||
|
||||
if [ -d "/usr/lib/x86_64-linux-gnu/perl" ]; then
|
||||
install -d AppDir/usr/lib/x86_64-linux-gnu
|
||||
cp -a /usr/lib/x86_64-linux-gnu/perl AppDir/usr/lib/x86_64-linux-gnu/
|
||||
fi
|
||||
|
||||
if [ -d "/usr/lib/x86_64-linux-gnu/perl5" ]; then
|
||||
install -d AppDir/usr/lib/x86_64-linux-gnu
|
||||
cp -a /usr/lib/x86_64-linux-gnu/perl5 AppDir/usr/lib/x86_64-linux-gnu/
|
||||
fi
|
||||
|
||||
if [ -d "/usr/share/perl" ]; then
|
||||
install -d AppDir/usr/share
|
||||
cp -a /usr/share/perl AppDir/usr/share/
|
||||
fi
|
||||
|
||||
if [ -d "/usr/share/perl5" ]; then
|
||||
install -d AppDir/usr/share
|
||||
cp -a /usr/share/perl5 AppDir/usr/share/
|
||||
fi
|
||||
|
||||
perl -MFile::Spec -e 'print "Build host File::Spec: $INC{\"File/Spec.pm\"}\n"'
|
||||
find AppDir/usr -path '*/File/Spec.pm' -print -quit | grep -q .
|
||||
|
||||
if compgen -G '/usr/lib/x86_64-linux-gnu/libpython3*.so*' > /dev/null; then
|
||||
install -d AppDir/usr/lib/x86_64-linux-gnu
|
||||
cp -a /usr/lib/x86_64-linux-gnu/libpython3*.so* AppDir/usr/lib/x86_64-linux-gnu/
|
||||
fi
|
||||
|
||||
# Every package ships the pinned font, including portable builds.
|
||||
cmp data/fonts/NotoColorEmoji.ttf AppDir/usr/share/fonts/zoitechat/NotoColorEmoji.ttf
|
||||
|
||||
if [ -d "/usr/lib/x86_64-linux-gnu/gtk-3.0/modules" ]; then
|
||||
install -d AppDir/usr/lib/x86_64-linux-gnu/gtk-3.0
|
||||
cp -a /usr/lib/x86_64-linux-gnu/gtk-3.0/modules AppDir/usr/lib/x86_64-linux-gnu/gtk-3.0/
|
||||
fi
|
||||
|
||||
if [ -d "/usr/lib/gtk-3.0/modules" ]; then
|
||||
install -d AppDir/usr/lib/gtk-3.0
|
||||
cp -a /usr/lib/gtk-3.0/modules AppDir/usr/lib/gtk-3.0/
|
||||
fi
|
||||
|
||||
# HTTPS inline-image downloads use GSocketClient TLS on Linux.
|
||||
# GLib provides the API, but TLS and system-proxy support live in
|
||||
# loadable GIO modules shipped by glib-networking. Bundle those
|
||||
# modules so the AppImage does not depend on the host copy.
|
||||
gio_module_dir="$(pkg-config --variable=giomoduledir gio-2.0)"
|
||||
|
||||
test -n "$gio_module_dir"
|
||||
test -f "${gio_module_dir}/libgiognutls.so"
|
||||
install -d "AppDir${gio_module_dir}"
|
||||
cp -a "${gio_module_dir}"/libgio*.so "AppDir${gio_module_dir}/"
|
||||
gio-querymodules "AppDir${gio_module_dir}"
|
||||
test -f "AppDir${gio_module_dir}/libgiognutls.so"
|
||||
test -s "AppDir${gio_module_dir}/giomodule.cache"
|
||||
|
||||
- name: Verify bundled plugins
|
||||
run: |
|
||||
set -eux
|
||||
|
||||
# Include every built-in plugin except the Windows-only update plugin.
|
||||
find AppDir/usr/lib -maxdepth 4 -type f -name '*.so' -path '*/zoitechat/plugins/*' -print | sort
|
||||
|
||||
for plugin in checksum fishlim lua perl python sysinfo; do
|
||||
find "AppDir/usr/lib" -maxdepth 4 -type f -name "${plugin}.so" -path '*/zoitechat/plugins/*' -print -quit | grep -q .
|
||||
done
|
||||
|
||||
- name: Build AppImage
|
||||
env:
|
||||
APPIMAGE_EXTRACT_AND_RUN: 1
|
||||
@@ -74,11 +178,9 @@ jobs:
|
||||
chmod +x linuxdeploy-plugin-gtk
|
||||
export PATH="${PWD}:${PATH}"
|
||||
|
||||
# Bundle CA certificates into the AppDir
|
||||
install -Dm644 /etc/ssl/certs/ca-certificates.crt \
|
||||
AppDir/etc/ssl/certs/ca-certificates.crt
|
||||
|
||||
# Custom AppRun: preserve typical AppDir runtime paths AND force CA bundle
|
||||
cat > AppRun <<'EOF'
|
||||
#!/bin/sh
|
||||
set -eu
|
||||
@@ -88,22 +190,105 @@ jobs:
|
||||
export PATH="$APPDIR/usr/bin:${PATH:-/usr/bin:/bin}"
|
||||
export LD_LIBRARY_PATH="$APPDIR/usr/lib:$APPDIR/usr/lib/x86_64-linux-gnu:${LD_LIBRARY_PATH:-}"
|
||||
export XDG_DATA_DIRS="$APPDIR/usr/share:${XDG_DATA_DIRS:-/usr/local/share:/usr/share}"
|
||||
export GTK_EXE_PREFIX="$APPDIR/usr"
|
||||
export GTK_DATA_PREFIX="$APPDIR/usr"
|
||||
gtk_path_entries=""
|
||||
if [ -d "$APPDIR/usr/lib/x86_64-linux-gnu/gtk-3.0" ]; then
|
||||
gtk_path_entries="$APPDIR/usr/lib/x86_64-linux-gnu/gtk-3.0"
|
||||
fi
|
||||
if [ -d "$APPDIR/usr/lib/gtk-3.0" ]; then
|
||||
gtk_path_entries="${gtk_path_entries:+$gtk_path_entries:}$APPDIR/usr/lib/gtk-3.0"
|
||||
fi
|
||||
if [ -n "$gtk_path_entries" ]; then
|
||||
export GTK_PATH="$gtk_path_entries${GTK_PATH:+:$GTK_PATH}"
|
||||
fi
|
||||
|
||||
if [ -d "$APPDIR/usr/lib/x86_64-linux-gnu/zoitechat/plugins" ]; then
|
||||
export ZOITECHAT_LIBDIR="$APPDIR/usr/lib/x86_64-linux-gnu/zoitechat/plugins"
|
||||
elif [ -d "$APPDIR/usr/lib/zoitechat/plugins" ]; then
|
||||
export ZOITECHAT_LIBDIR="$APPDIR/usr/lib/zoitechat/plugins"
|
||||
fi
|
||||
|
||||
if [ -d "$APPDIR/usr/share/glib-2.0/schemas" ]; then
|
||||
export GSETTINGS_SCHEMA_DIR="$APPDIR/usr/share/glib-2.0/schemas${GSETTINGS_SCHEMA_DIR:+:$GSETTINGS_SCHEMA_DIR}"
|
||||
fi
|
||||
|
||||
if [ -d "$APPDIR/usr/lib/x86_64-linux-gnu/gio/modules" ]; then
|
||||
export GIO_EXTRA_MODULES="$APPDIR/usr/lib/x86_64-linux-gnu/gio/modules${GIO_EXTRA_MODULES:+:$GIO_EXTRA_MODULES}"
|
||||
gio_module_dir="$APPDIR/usr/lib/x86_64-linux-gnu/gio/modules"
|
||||
elif [ -d "$APPDIR/usr/lib/gio/modules" ]; then
|
||||
export GIO_EXTRA_MODULES="$APPDIR/usr/lib/gio/modules${GIO_EXTRA_MODULES:+:$GIO_EXTRA_MODULES}"
|
||||
gio_module_dir="$APPDIR/usr/lib/gio/modules"
|
||||
else
|
||||
gio_module_dir=""
|
||||
fi
|
||||
|
||||
# OpenSSL trust store override (fixes “unable to get local issuer certificate (20)”)
|
||||
if [ -n "$gio_module_dir" ]; then
|
||||
export GIO_MODULE_DIR="$gio_module_dir"
|
||||
export GIO_EXTRA_MODULES="$gio_module_dir"
|
||||
fi
|
||||
|
||||
unset GTK_MODULES
|
||||
|
||||
perl5lib_entries=""
|
||||
for dir in \
|
||||
"$APPDIR/usr/lib/x86_64-linux-gnu/perl-base" \
|
||||
"$APPDIR/usr/lib/x86_64-linux-gnu/perl"/* \
|
||||
"$APPDIR/usr/lib/x86_64-linux-gnu/perl5"/* \
|
||||
"$APPDIR/usr/share/perl"/* \
|
||||
"$APPDIR/usr/share/perl5"
|
||||
do
|
||||
if [ -d "$dir" ]; then
|
||||
perl5lib_entries="${perl5lib_entries:+$perl5lib_entries:}$dir"
|
||||
fi
|
||||
done
|
||||
|
||||
if [ -n "$perl5lib_entries" ]; then
|
||||
export PERL5LIB="$perl5lib_entries${PERL5LIB:+:$PERL5LIB}"
|
||||
fi
|
||||
|
||||
export PYTHONHOME="$APPDIR/usr"
|
||||
python_stdlib_dir="$(find "$APPDIR/usr/lib" -maxdepth 1 -type d -name 'python3.*' | head -n 1 || true)"
|
||||
pythonpath_entries=""
|
||||
if [ -n "$python_stdlib_dir" ] && [ -d "$python_stdlib_dir/dist-packages" ]; then
|
||||
pythonpath_entries="$python_stdlib_dir/dist-packages"
|
||||
fi
|
||||
if [ -d "$APPDIR/usr/lib/python3/dist-packages" ]; then
|
||||
pythonpath_entries="${pythonpath_entries:+$pythonpath_entries:}$APPDIR/usr/lib/python3/dist-packages"
|
||||
fi
|
||||
if [ -d "$APPDIR/usr/lib/x86_64-linux-gnu/python3/dist-packages" ]; then
|
||||
pythonpath_entries="${pythonpath_entries:+$pythonpath_entries:}$APPDIR/usr/lib/x86_64-linux-gnu/python3/dist-packages"
|
||||
fi
|
||||
if [ -n "$pythonpath_entries" ]; then
|
||||
export PYTHONPATH="$pythonpath_entries${PYTHONPATH:+:$PYTHONPATH}"
|
||||
fi
|
||||
|
||||
# Register the private font without hiding the host's normal fonts.
|
||||
export ZOITECHAT_EMOJI_FONT="${ZOITECHAT_EMOJI_FONT:-$APPDIR/usr/share/fonts/zoitechat/NotoColorEmoji.ttf}"
|
||||
|
||||
# OpenSSL trust store override
|
||||
export SSL_CERT_FILE="${SSL_CERT_FILE:-$APPDIR/etc/ssl/certs/ca-certificates.crt}"
|
||||
export SSL_CERT_DIR="${SSL_CERT_DIR:-$APPDIR/etc/ssl/certs}"
|
||||
export CURL_CA_BUNDLE="${CURL_CA_BUNDLE:-$SSL_CERT_FILE}"
|
||||
|
||||
# Prefer Wayland if the session provides it, but keep X11 fallback.
|
||||
# Don't override if the user already set GDK_BACKEND explicitly.
|
||||
if [ -z "${GDK_BACKEND:-}" ]; then
|
||||
if [ -n "${WAYLAND_DISPLAY:-}" ] || [ "${XDG_SESSION_TYPE:-}" = "wayland" ]; then
|
||||
export GDK_BACKEND="wayland,x11"
|
||||
else
|
||||
export GDK_BACKEND="x11"
|
||||
fi
|
||||
fi
|
||||
|
||||
for hook_dir in "$APPDIR/apprun-hooks" "$APPDIR/usr/apprun-hooks"; do
|
||||
if [ -d "$hook_dir" ]; then
|
||||
for hook in "$hook_dir"/*.sh; do
|
||||
if [ -f "$hook" ]; then
|
||||
. "$hook"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
done
|
||||
|
||||
exec "$APPDIR/usr/bin/zoitechat" "$@"
|
||||
EOF
|
||||
chmod +x AppRun
|
||||
@@ -128,7 +313,7 @@ jobs:
|
||||
subject-path: Zoitechat-*-x86_64.AppImage
|
||||
|
||||
- name: Upload AppImage artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: zoitechat-appimage
|
||||
path: Zoitechat-*-x86_64.AppImage
|
||||
@@ -1,59 +0,0 @@
|
||||
name: Debian Build
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [master]
|
||||
pull_request:
|
||||
branches: [master]
|
||||
|
||||
jobs:
|
||||
debian_build:
|
||||
runs-on: ubuntu-24.04
|
||||
container:
|
||||
image: debian:bookworm
|
||||
|
||||
steps:
|
||||
- name: Install base tooling (git + deps)
|
||||
run: |
|
||||
set -eux
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
apt-get update
|
||||
apt-get install -y --no-install-recommends \
|
||||
git ca-certificates \
|
||||
build-essential pkg-config meson ninja-build cmake \
|
||||
gettext \
|
||||
libcanberra-dev libdbus-glib-1-dev libglib2.0-dev libgtk2.0-dev \
|
||||
libluajit-5.1-dev libpci-dev libperl-dev libssl-dev \
|
||||
python3-dev python3-cffi mono-devel desktop-file-utils
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: true
|
||||
|
||||
- name: Configure
|
||||
run: |
|
||||
set -eux
|
||||
rm -rf build
|
||||
meson setup build \
|
||||
-Dtext-frontend=true \
|
||||
-Dauto_features=enabled
|
||||
# If configure fails, show the project's actual option names in the log.
|
||||
- name: Show Meson options (on failure)
|
||||
if: failure()
|
||||
run: |
|
||||
set -eux
|
||||
meson configure build || true
|
||||
|
||||
- name: Build
|
||||
run: |
|
||||
set -eux
|
||||
ninja -C build
|
||||
|
||||
- name: Test
|
||||
run: |
|
||||
set -eux
|
||||
ninja -C build test
|
||||
|
||||
- name: Install
|
||||
run: |
|
||||
set -eux
|
||||
ninja -C build install
|
||||
@@ -2,7 +2,7 @@ name: Flatpak Build
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [master]
|
||||
branches: [master, 'release/**']
|
||||
pull_request:
|
||||
branches: [master]
|
||||
|
||||
@@ -21,21 +21,25 @@ jobs:
|
||||
options: --privileged
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v7
|
||||
with:
|
||||
submodules: true
|
||||
|
||||
- name: Generate PSL list
|
||||
run: curl -fsSL https://publicsuffix.org/list/public_suffix_list.dat -o src/common/public_suffix_list.dat
|
||||
|
||||
- name: Build Flatpak
|
||||
id: flatpak_builder
|
||||
uses: flatpak/flatpak-github-actions/flatpak-builder@v6
|
||||
with:
|
||||
bundle: zoitechat.flatpak
|
||||
manifest-path: flatpak/net.zoite.Zoitechat.json
|
||||
cache-key: flatpak-builder-${{ github.sha }}
|
||||
cache: false
|
||||
restore-cache: false
|
||||
|
||||
- name: Upload Flatpak Bundle
|
||||
id: upload_flatpak
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: zoitechat.flatpak
|
||||
path: zoitechat.flatpak
|
||||
|
||||
@@ -0,0 +1,168 @@
|
||||
name: macOS build
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
sign_and_notarize:
|
||||
description: 'Sign with Developer ID and notarize using release credentials'
|
||||
type: boolean
|
||||
default: false
|
||||
push:
|
||||
branches: [master]
|
||||
tags: ['v*']
|
||||
paths:
|
||||
- 'src/**'
|
||||
- 'plugins/**'
|
||||
- 'data/**'
|
||||
- 'tools/**'
|
||||
- 'po/**'
|
||||
- 'meson*'
|
||||
- 'VERSION'
|
||||
- 'packaging/macos/**'
|
||||
- '.github/workflows/macos-build.yml'
|
||||
pull_request:
|
||||
paths:
|
||||
- 'src/**'
|
||||
- 'plugins/**'
|
||||
- 'data/**'
|
||||
- 'tools/**'
|
||||
- 'po/**'
|
||||
- 'meson*'
|
||||
- 'VERSION'
|
||||
- 'packaging/macos/**'
|
||||
- '.github/workflows/macos-build.yml'
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
build:
|
||||
if: >-
|
||||
github.event_name == 'pull_request' ||
|
||||
(github.event_name == 'push' && !startsWith(github.ref, 'refs/tags/')) ||
|
||||
(github.event_name == 'workflow_dispatch' && !inputs.sign_and_notarize)
|
||||
name: Native ${{ matrix.arch }} bundle
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- runner: macos-15
|
||||
arch: arm64
|
||||
- runner: macos-15-intel
|
||||
arch: x86_64
|
||||
runs-on: ${{ matrix.runner }}
|
||||
timeout-minutes: 90
|
||||
env:
|
||||
HOMEBREW_NO_AUTO_UPDATE: '1'
|
||||
steps:
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
- name: Install native dependencies
|
||||
run: brew bundle --file packaging/macos/Brewfile
|
||||
- name: Test packaging logic
|
||||
run: python3 -m unittest discover -s packaging/macos/tests -v
|
||||
- name: Build and test application
|
||||
run: python3 packaging/macos/build.py --build-number '${{ github.run_number }}'
|
||||
- name: Verify relocated startup
|
||||
run: python3 packaging/macos/smoke.py dist/ZoiteChat.app
|
||||
# Desktop capture can be unavailable on a runner image. Preserve the
|
||||
# existing build gate and publish the separate visual-check outcome.
|
||||
- name: Exercise IRC and capture the macOS application window
|
||||
continue-on-error: true
|
||||
timeout-minutes: 5
|
||||
run: python3 packaging/macos/visual-smoke.py dist/ZoiteChat.app
|
||||
- name: Upload screenshot and visual-check evidence
|
||||
if: always()
|
||||
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7
|
||||
with:
|
||||
name: ZoiteChat-macos-${{ matrix.arch }}-visual-check
|
||||
path: dist/visual-check/
|
||||
if-no-files-found: ignore
|
||||
retention-days: 14
|
||||
- name: Create artifact preserving the application signature
|
||||
run: ditto -c -k --keepParent dist/ZoiteChat.app dist/ZoiteChat-${{ matrix.arch }}.zip
|
||||
- uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7
|
||||
with:
|
||||
name: ZoiteChat-macos-${{ matrix.arch }}
|
||||
path: dist/ZoiteChat-${{ matrix.arch }}.zip
|
||||
if-no-files-found: error
|
||||
- name: Upload build logs on failure
|
||||
if: failure()
|
||||
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7
|
||||
with:
|
||||
name: ZoiteChat-macos-${{ matrix.arch }}-logs
|
||||
path: build-macos/meson-logs/
|
||||
if-no-files-found: ignore
|
||||
|
||||
release:
|
||||
name: Signed and notarized ${{ matrix.arch }} release
|
||||
if: >-
|
||||
(github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')) ||
|
||||
(github.event_name == 'workflow_dispatch' && inputs.sign_and_notarize && github.ref == 'refs/heads/master')
|
||||
environment: macos-release
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- runner: macos-15
|
||||
arch: arm64
|
||||
- runner: macos-15-intel
|
||||
arch: x86_64
|
||||
runs-on: ${{ matrix.runner }}
|
||||
timeout-minutes: 180
|
||||
env:
|
||||
HOMEBREW_NO_AUTO_UPDATE: '1'
|
||||
steps:
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Validate release settings before building
|
||||
env:
|
||||
MACOS_CERTIFICATE_P12_BASE64: ${{ secrets.MACOS_CERTIFICATE_P12_BASE64 }}
|
||||
MACOS_CERTIFICATE_PASSWORD: ${{ secrets.MACOS_CERTIFICATE_PASSWORD }}
|
||||
MACOS_SIGNING_IDENTITY: ${{ vars.MACOS_SIGNING_IDENTITY || secrets.MACOS_SIGNING_IDENTITY }}
|
||||
APPLE_API_KEY_P8: ${{ secrets.APPLE_API_KEY_P8 }}
|
||||
APPLE_API_KEY_ID: ${{ secrets.APPLE_API_KEY_ID }}
|
||||
APPLE_API_ISSUER_ID: ${{ secrets.APPLE_API_ISSUER_ID }}
|
||||
run: python3 packaging/macos/release.py --check-config
|
||||
- name: Install native dependencies
|
||||
run: brew bundle --file packaging/macos/Brewfile
|
||||
- name: Test packaging and release logic
|
||||
run: python3 -m unittest discover -s packaging/macos/tests -v
|
||||
- name: Build and test application
|
||||
run: python3 packaging/macos/build.py --build-number '${{ github.run_number }}'
|
||||
- name: Verify relocated startup
|
||||
run: python3 packaging/macos/smoke.py dist/ZoiteChat.app
|
||||
- name: Sign, notarize, staple and verify release
|
||||
env:
|
||||
MACOS_CERTIFICATE_P12_BASE64: ${{ secrets.MACOS_CERTIFICATE_P12_BASE64 }}
|
||||
MACOS_CERTIFICATE_PASSWORD: ${{ secrets.MACOS_CERTIFICATE_PASSWORD }}
|
||||
MACOS_SIGNING_IDENTITY: ${{ vars.MACOS_SIGNING_IDENTITY || secrets.MACOS_SIGNING_IDENTITY }}
|
||||
APPLE_API_KEY_P8: ${{ secrets.APPLE_API_KEY_P8 }}
|
||||
APPLE_API_KEY_ID: ${{ secrets.APPLE_API_KEY_ID }}
|
||||
APPLE_API_ISSUER_ID: ${{ secrets.APPLE_API_ISSUER_ID }}
|
||||
run: >-
|
||||
python3 packaging/macos/release.py
|
||||
--app dist/ZoiteChat.app
|
||||
--output dist/ZoiteChat-${{ matrix.arch }}-signed-notarized.zip
|
||||
--diagnostics dist/notarization
|
||||
--notary-timeout 60m
|
||||
- name: Upload signed and notarized application
|
||||
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7
|
||||
with:
|
||||
name: ZoiteChat-macos-${{ matrix.arch }}-signed-notarized
|
||||
path: dist/ZoiteChat-${{ matrix.arch }}-signed-notarized.zip
|
||||
if-no-files-found: error
|
||||
- name: Upload notarization diagnostics
|
||||
if: always()
|
||||
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7
|
||||
with:
|
||||
name: ZoiteChat-macos-${{ matrix.arch }}-notarization-log
|
||||
path: dist/notarization/*.json
|
||||
if-no-files-found: ignore
|
||||
- name: Upload build logs on failure
|
||||
if: failure()
|
||||
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7
|
||||
with:
|
||||
name: ZoiteChat-macos-${{ matrix.arch }}-release-build-logs
|
||||
path: build-macos/meson-logs/
|
||||
if-no-files-found: ignore
|
||||
@@ -1,56 +0,0 @@
|
||||
name: MSYS2 Build
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [master]
|
||||
pull_request:
|
||||
branches: [master]
|
||||
|
||||
jobs:
|
||||
msys2_build:
|
||||
runs-on: windows-latest
|
||||
defaults:
|
||||
run:
|
||||
shell: msys2 {0}
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- uses: msys2/setup-msys2@v2
|
||||
with:
|
||||
msystem: MINGW64
|
||||
update: true
|
||||
install: >-
|
||||
mingw-w64-x86_64-gcc
|
||||
mingw-w64-x86_64-pkg-config
|
||||
mingw-w64-x86_64-python-cffi
|
||||
mingw-w64-x86_64-meson
|
||||
mingw-w64-x86_64-ninja
|
||||
mingw-w64-x86_64-gtk2
|
||||
mingw-w64-x86_64-gtk-update-icon-cache
|
||||
mingw-w64-x86_64-luajit
|
||||
mingw-w64-x86_64-desktop-file-utils
|
||||
mingw-w64-x86_64-gettext-tools
|
||||
|
||||
- name: Sanity check gettext ITS rules
|
||||
run: |
|
||||
set -eux
|
||||
which msgfmt || true
|
||||
msgfmt --version
|
||||
ls -la /mingw64/share/gettext-*/its || true
|
||||
|
||||
- name: Configure
|
||||
run: |
|
||||
set -eux
|
||||
rm -rf build
|
||||
meson setup build \
|
||||
-Dtext-frontend=true \
|
||||
-Ddbus=disabled \
|
||||
-Dwith-upd=false \
|
||||
-Dwith-perl=false
|
||||
|
||||
- name: Build
|
||||
run: ninja -C build
|
||||
|
||||
- name: Test
|
||||
run: ninja -C build test
|
||||
@@ -1,117 +0,0 @@
|
||||
name: OpenBSD Build
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [master]
|
||||
pull_request:
|
||||
branches: [master]
|
||||
|
||||
jobs:
|
||||
openbsd_package:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: true
|
||||
|
||||
- name: Build OpenBSD package
|
||||
uses: vmactions/openbsd-vm@v1
|
||||
with:
|
||||
release: '7.5'
|
||||
usesh: true
|
||||
sync: rsync
|
||||
run: |
|
||||
set -eux
|
||||
|
||||
rdate -n pool.ntp.org
|
||||
export PKG_PATH="https://ftp.openbsd.org/pub/OpenBSD/7.5/packages/$(uname -m)/"
|
||||
|
||||
pkg_add -U \
|
||||
git \
|
||||
meson ninja pkgconf gmake \
|
||||
gettext-tools \
|
||||
glib2 gtk+2 dbus-glib libcanberra \
|
||||
luajit mono libgdiplus openssl
|
||||
|
||||
work="$(mktemp -d /tmp/zoitechat.XXXXXX)"
|
||||
trap 'rm -rf "$work"' EXIT
|
||||
|
||||
rsync -a --delete "$GITHUB_WORKSPACE"/ "$work/src/"
|
||||
cd "$work/src"
|
||||
|
||||
rm -rf build
|
||||
meson setup build \
|
||||
--prefix=/usr/local \
|
||||
-Dtext-frontend=true \
|
||||
-Dplugin=false \
|
||||
-Dauto_features=enabled
|
||||
|
||||
ninja -C build
|
||||
|
||||
staging="$work/staging"
|
||||
rm -rf "$staging"
|
||||
mkdir -p "$staging"
|
||||
|
||||
# Staged install
|
||||
DESTDIR="$staging" meson install -C build --no-rebuild
|
||||
|
||||
# If these exist, something ignored DESTDIR (install scripts are leaking)
|
||||
ls -l /usr/local/bin/zoitechat /usr/local/bin/thememan 2>/dev/null || true
|
||||
|
||||
sync
|
||||
sleep 1
|
||||
sync
|
||||
|
||||
# Freeze staged tree so pkg_create doesn't see moving targets
|
||||
snap="$work/staging-snap"
|
||||
rm -rf "$snap"
|
||||
mkdir -p "$snap"
|
||||
(cd "$staging" && pax -rw -pe . "$snap")
|
||||
|
||||
version="$(meson introspect --projectinfo build | sed -n 's/.*"version"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/p')"
|
||||
pkg_name="zoitechat-${version}"
|
||||
pkg_file="${pkg_name}.tgz"
|
||||
plist="$work/openbsd-plist"
|
||||
desc="$work/DESCR"
|
||||
|
||||
cat >"$desc" <<'EOF'
|
||||
ZoiteChat is an IRC client (HexChat-derived) with a GTK UI and optional tools.
|
||||
EOF
|
||||
|
||||
{
|
||||
echo "@cwd /usr/local"
|
||||
|
||||
# Files + symlinks
|
||||
find "$snap/usr/local" \( -type f -o -type l \) -print \
|
||||
| LC_ALL=C sort \
|
||||
| sed "s#^$snap/usr/local/##"
|
||||
|
||||
# Directories (reverse so children removed first)
|
||||
find "$snap/usr/local" -mindepth 1 -type d -print \
|
||||
| LC_ALL=C sort -r \
|
||||
| sed "s#^$snap/usr/local/##" \
|
||||
| sed 's#^#@dir #'
|
||||
} > "$plist"
|
||||
|
||||
# OpenBSD pkg_create: COMMENT is set via -D COMMENT=... (mandatory), no -c flag exists.
|
||||
# Create the .tgz in $work so we can copy it back out.
|
||||
cd "$work"
|
||||
pkg_create \
|
||||
-B "$snap" \
|
||||
-p /usr/local \
|
||||
-f "$plist" \
|
||||
-d "$desc" \
|
||||
-D "COMMENT=ZoiteChat IRC client" \
|
||||
-D "FULLPKGPATH=net/zoitechat" \
|
||||
"$pkg_file"
|
||||
|
||||
mkdir -p "$GITHUB_WORKSPACE/artifacts"
|
||||
cp "$work/$pkg_file" "$GITHUB_WORKSPACE/artifacts/"
|
||||
|
||||
- name: Upload OpenBSD package
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: openbsd-package
|
||||
path: artifacts/*.tgz
|
||||
@@ -4,13 +4,14 @@ on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- 'release/**'
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
|
||||
jobs:
|
||||
windows_build:
|
||||
runs-on: windows-2019
|
||||
runs-on: windows-2022
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
@@ -20,89 +21,211 @@ jobs:
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
platform: [x64, win32]
|
||||
arch: [x64, x86]
|
||||
exclude:
|
||||
- platform: x64
|
||||
arch: x86
|
||||
- platform: win32
|
||||
arch: x64
|
||||
platform: [x64]
|
||||
arch: [x64]
|
||||
fail-fast: false
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v7
|
||||
|
||||
- uses: actions/setup-python@v5
|
||||
- uses: actions/setup-python@v7
|
||||
with:
|
||||
python-version: '3.14.2'
|
||||
python-version: '3.14.3'
|
||||
architecture: ${{ matrix.arch }}
|
||||
|
||||
- name: Install Dependencies
|
||||
run: |
|
||||
New-Item -Name "deps" -ItemType "Directory"
|
||||
New-Item -Name "deps" -ItemType "Directory" -Force | Out-Null
|
||||
|
||||
Invoke-WebRequest http://files.jrsoftware.org/is/5/innosetup-5.5.9-unicode.exe -OutFile deps\innosetup-unicode.exe
|
||||
python -m pip install --upgrade pip
|
||||
python -m pip install cffi
|
||||
python -m pip install zstandard
|
||||
|
||||
$ProgressPreference = 'SilentlyContinue'
|
||||
function Download-WithRetry {
|
||||
param(
|
||||
[string]$Url,
|
||||
[string]$OutFile,
|
||||
[int]$MaxAttempts = 5,
|
||||
[int]$InitialDelaySeconds = 2
|
||||
)
|
||||
for ($attempt = 1; $attempt -le $MaxAttempts; $attempt++) {
|
||||
try {
|
||||
Invoke-WebRequest -Uri $Url -OutFile $OutFile -ErrorAction Stop
|
||||
return
|
||||
}
|
||||
catch {
|
||||
if ($attempt -eq $MaxAttempts) {
|
||||
throw
|
||||
}
|
||||
Start-Sleep -Seconds ($InitialDelaySeconds * [math]::Pow(2, $attempt - 1))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Download-WithRetry -Url https://github.com/jrsoftware/issrc/releases/download/is-6_7_1/innosetup-6.7.1.exe -OutFile deps\innosetup-unicode.exe
|
||||
& deps\innosetup-unicode.exe /VERYSILENT | Out-Null
|
||||
|
||||
Invoke-WebRequest https://github.com/zoitechat/gvsbuild/releases/download/zoitechat-2.17.0/idpsetup-1.5.1.exe -OutFile deps\idpsetup.exe
|
||||
& deps\idpsetup.exe /VERYSILENT
|
||||
Download-WithRetry -Url https://github.com/ZoiteChat/gvsbuild/releases/download/zoitechat-2.20.0-alpha.1/GTK3_Gvsbuild_zoitechat-2.20.0-alpha.1_x64.zip -OutFile deps\gtk-${{ matrix.arch }}.zip
|
||||
Expand-Archive -LiteralPath deps\gtk-${{ matrix.arch }}.zip -DestinationPath C:\gtk-build\gtk\x64\release -Force
|
||||
|
||||
Invoke-WebRequest https://github.com/zoitechat/gvsbuild/releases/download/zoitechat-2.17.0/gtk-${{ matrix.platform }}-2018-08-29-openssl1.1.7z -OutFile deps\gtk-${{ matrix.arch }}.7z
|
||||
& 7z.exe x deps\gtk-${{ matrix.arch }}.7z -oC:\gtk-build\gtk
|
||||
# The GTK3 archive omits librsvg. Add only its renderer, loader and
|
||||
# license from the companion release, keeping the GTK3 DLLs intact.
|
||||
Download-WithRetry -Url https://github.com/ZoiteChat/gvsbuild/releases/download/zoitechat-2.20.0-alpha.1/GTK4_Gvsbuild_zoitechat-2.20.0-alpha.1_x64.zip -OutFile deps\svg-runtime.zip
|
||||
if ((Get-FileHash deps\svg-runtime.zip -Algorithm SHA256).Hash -ne 'fb657f9ebae3a6807defb15e66091d643a703ee66cb37488e3e11e5646f45adb') {
|
||||
throw 'Unexpected SVG runtime archive checksum'
|
||||
}
|
||||
$svgArchive = [System.IO.Compression.ZipFile]::OpenRead((Resolve-Path deps\svg-runtime.zip))
|
||||
try {
|
||||
foreach ($name in @('bin/rsvg-2-2.dll', 'lib/gdk-pixbuf-2.0/2.10.0/loaders/pixbufloader_svg.dll', 'share/doc/librsvg/COPYING.LIB')) {
|
||||
$entry = $svgArchive.GetEntry($name)
|
||||
if ($null -eq $entry) { throw "Missing SVG runtime file: $name" }
|
||||
$destination = Join-Path 'C:\gtk-build\gtk\x64\release' $name
|
||||
New-Item -ItemType Directory -Path (Split-Path $destination) -Force | Out-Null
|
||||
[System.IO.Compression.ZipFileExtensions]::ExtractToFile($entry, $destination, $true)
|
||||
}
|
||||
}
|
||||
finally { $svgArchive.Dispose() }
|
||||
# This loads the module now, catching missing DLLs before the build.
|
||||
& C:\gtk-build\gtk\x64\release\bin\gdk-pixbuf-query-loaders.exe --update-cache
|
||||
if ($LASTEXITCODE -ne 0) { throw 'Could not generate the pixbuf loader cache' }
|
||||
if (-not (Select-String -LiteralPath 'C:\gtk-build\gtk\x64\release\lib\gdk-pixbuf-2.0\2.10.0\loaders.cache' -SimpleMatch '"svg"')) {
|
||||
throw 'SVG loader could not be loaded with the GTK3 runtime'
|
||||
}
|
||||
|
||||
Invoke-WebRequest https://github.com/zoitechat/gvsbuild/releases/download/zoitechat-2.17.0/gendef-20111031.7z -OutFile deps\gendef.7z
|
||||
Download-WithRetry -Url https://repo.msys2.org/mingw/x86_64/mingw-w64-x86_64-hicolor-icon-theme-0.18-1-any.pkg.tar.zst -OutFile deps\hicolor-icon-theme.pkg.tar.zst
|
||||
python -c "import tarfile,zstandard,pathlib;archive=pathlib.Path(r'deps\\hicolor-icon-theme.pkg.tar.zst');target=pathlib.Path(r'C:\\gtk-build\\gtk\\x64\\release');dctx=zstandard.ZstdDecompressor();f=archive.open('rb');reader=dctx.stream_reader(f);tf=tarfile.open(fileobj=reader,mode='r|');[tf.extract(m,path=target) for m in tf if m.name.startswith('mingw64/share/icons/hicolor/')];tf.close();reader.close();f.close()"
|
||||
|
||||
Download-WithRetry -Url https://repo.msys2.org/mingw/x86_64/mingw-w64-x86_64-libarchive-3.8.6-1-any.pkg.tar.zst -OutFile deps\libarchive.pkg.tar.zst
|
||||
python -c "import tarfile,zstandard,pathlib;archive=pathlib.Path(r'deps\\libarchive.pkg.tar.zst');target=pathlib.Path(r'C:\\gtk-build\\gtk\\x64\\release');dctx=zstandard.ZstdDecompressor();f=archive.open('rb');reader=dctx.stream_reader(f);tf=tarfile.open(fileobj=reader,mode='r|');[tf.extract(m,path=target) for m in tf if m.name.startswith(('mingw64/include/archive','mingw64/lib/libarchive','mingw64/bin/libarchive'))];tf.close();reader.close();f.close()"
|
||||
|
||||
if (Test-Path C:\gtk-build\gtk\x64\release\mingw64\share\icons\hicolor) {
|
||||
New-Item -Path C:\gtk-build\gtk\x64\release\share\icons -ItemType Directory -Force | Out-Null
|
||||
Copy-Item -Path C:\gtk-build\gtk\x64\release\mingw64\share\icons\hicolor -Destination C:\gtk-build\gtk\x64\release\share\icons\hicolor -Recurse -Force
|
||||
}
|
||||
if (Test-Path C:\gtk-build\gtk\x64\release\mingw64\include) {
|
||||
New-Item -Path C:\gtk-build\gtk\x64\release\include -ItemType Directory -Force | Out-Null
|
||||
Copy-Item -Path C:\gtk-build\gtk\x64\release\mingw64\include\archive* -Destination C:\gtk-build\gtk\x64\release\include -Recurse -Force
|
||||
}
|
||||
if (Test-Path C:\gtk-build\gtk\x64\release\mingw64\lib) {
|
||||
New-Item -Path C:\gtk-build\gtk\x64\release\lib -ItemType Directory -Force | Out-Null
|
||||
Copy-Item -Path C:\gtk-build\gtk\x64\release\mingw64\lib\libarchive* -Destination C:\gtk-build\gtk\x64\release\lib -Force
|
||||
}
|
||||
if (Test-Path C:\gtk-build\gtk\x64\release\mingw64\bin) {
|
||||
New-Item -Path C:\gtk-build\gtk\x64\release\bin -ItemType Directory -Force | Out-Null
|
||||
Copy-Item -Path C:\gtk-build\gtk\x64\release\mingw64\bin\libarchive*.dll -Destination C:\gtk-build\gtk\x64\release\bin -Force
|
||||
}
|
||||
if (Test-Path C:\gtk-build\gtk\x64\release\mingw64) {
|
||||
Remove-Item -Path C:\gtk-build\gtk\x64\release\mingw64 -Recurse -Force
|
||||
}
|
||||
|
||||
Download-WithRetry -Url https://github.com/ZoiteChat/gvsbuild/releases/download/zoitechat-2.18.0-pre4/gendef20260315.7z -OutFile deps\gendef.7z
|
||||
& 7z.exe x deps\gendef.7z -oC:\gtk-build
|
||||
|
||||
Invoke-WebRequest https://github.com/zoitechat/gvsbuild/releases/download/zoitechat-2.17.0/WinSparkle-20151011.7z -OutFile deps\WinSparkle.7z
|
||||
Download-WithRetry -Url https://github.com/ZoiteChat/gvsbuild/releases/download/zoitechat-2.18.0-pre4/WinSparkle-20260315.7z -OutFile deps\WinSparkle.7z
|
||||
& 7z.exe x deps\WinSparkle.7z -oC:\gtk-build\WinSparkle
|
||||
|
||||
Invoke-WebRequest https://github.com/zoitechat/gvsbuild/releases/download/zoitechat-2.17.0/perl-5.20.0-${{ matrix.arch }}.7z -OutFile deps\perl-${{ matrix.arch }}.7z
|
||||
& 7z.exe x deps\perl-${{ matrix.arch }}.7z -oC:\gtk-build\perl-5.20\${{ matrix.platform }}
|
||||
Download-WithRetry -Url https://github.com/ZoiteChat/gvsbuild/releases/download/zoitechat-2.18.0-pre4/perl-5.42.0.1-${{ matrix.arch }}.7z -OutFile deps\perl-${{ matrix.arch }}.7z
|
||||
& 7z.exe x deps\perl-${{ matrix.arch }}.7z -oC:\gtk-build\perl-5.42.0.1\${{ matrix.platform }}
|
||||
|
||||
# Resolve python root from setup-python
|
||||
$pyRoot = $env:pythonLocation
|
||||
if (-not $pyRoot) { $pyRoot = & python -c "import sys; print(sys.prefix)" }
|
||||
|
||||
# Create BOTH paths because the .vcxproj hard-codes python-3.14\...
|
||||
foreach ($pyDir in @("C:\gtk-build\python-3.14.2", "C:\gtk-build\python-3.14")) {
|
||||
foreach ($pyDir in @("C:\gtk-build\python-3.14.3", "C:\gtk-build\python-3.14")) {
|
||||
New-Item -Path $pyDir -ItemType Directory -Force | Out-Null
|
||||
$target = Join-Path $pyDir "${{ matrix.platform }}"
|
||||
if (Test-Path $target) { Remove-Item $target -Recurse -Force }
|
||||
New-Item -Path $pyDir -Name "${{ matrix.platform }}" -ItemType Junction -Value $pyRoot | Out-Null
|
||||
}
|
||||
|
||||
- uses: actions/setup-python@v7
|
||||
with:
|
||||
python-version: '3.8.10'
|
||||
architecture: ${{ matrix.arch }}
|
||||
|
||||
- name: Prepare Python 3.8
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
python -m pip install cffi
|
||||
|
||||
$pyRoot = $env:pythonLocation
|
||||
if (-not $pyRoot) { $pyRoot = & python -c "import sys; print(sys.prefix)" }
|
||||
|
||||
foreach ($pyDir in @("C:\gtk-build\python-3.8.10", "C:\gtk-build\python-3.8")) {
|
||||
New-Item -Path $pyDir -ItemType Directory -Force | Out-Null
|
||||
$target = Join-Path $pyDir "${{ matrix.platform }}"
|
||||
if (Test-Path $target) { Remove-Item $target -Recurse -Force }
|
||||
New-Item -Path $pyDir -Name "${{ matrix.platform }}" -ItemType Junction -Value $pyRoot | Out-Null
|
||||
}
|
||||
|
||||
- name: Build
|
||||
run: |
|
||||
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\Tools\VsDevCmd.bat"
|
||||
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\Tools\VsDevCmd.bat"
|
||||
|
||||
set "PYTHON_DIR=C:\gtk-build\python-3.14.2\${{ matrix.platform }}"
|
||||
set "PYTHON_DIR=C:\gtk-build\python-3.14.3\${{ matrix.platform }}"
|
||||
if not exist "%PYTHON_DIR%\libs\python314.lib" (
|
||||
echo Missing %PYTHON_DIR%\libs\python314.lib
|
||||
dir "%PYTHON_DIR%\libs"
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
set "PYTHON38_DIR=C:\gtk-build\python-3.8\${{ matrix.platform }}"
|
||||
if not exist "%PYTHON38_DIR%\libs\python38.lib" (
|
||||
echo Missing %PYTHON38_DIR%\libs\python38.lib
|
||||
dir "%PYTHON38_DIR%\libs"
|
||||
exit /b 1
|
||||
)
|
||||
if not exist "%PYTHON38_DIR%\Lib\site-packages\_cffi_backend.cp38*.pyd" (
|
||||
echo Missing %PYTHON38_DIR%\Lib\site-packages\_cffi_backend.cp38*.pyd
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
set "LIB=%PYTHON_DIR%\libs;%LIB%"
|
||||
set "INCLUDE=%PYTHON_DIR%\include;%INCLUDE%"
|
||||
|
||||
powershell -NoProfile -ExecutionPolicy Bypass -Command "$archiveLib='C:\gtk-build\gtk\x64\release\lib\libarchive.lib'; if (-not (Test-Path $archiveLib)) { $archiveDll = Get-ChildItem 'C:\gtk-build\gtk\x64\release\bin\libarchive*.dll' | Select-Object -First 1; if ($archiveDll) { Push-Location 'C:\gtk-build\gtk\x64\release\lib'; & 'C:\gtk-build\gendef\gendef.exe' $archiveDll.FullName | Out-Null; $archiveDef = Get-ChildItem 'libarchive*.def' | Select-Object -First 1; if ($archiveDef) { & lib /def:$archiveDef.Name /machine:${{ matrix.platform }} /out:libarchive.lib | Out-Null }; Pop-Location } }"
|
||||
|
||||
msbuild win32\zoitechat.sln /m /verbosity:minimal /p:Configuration=Release /p:Platform=${{ matrix.platform }}
|
||||
if errorlevel 1 exit /b 1
|
||||
|
||||
if not exist "..\zoitechat-build\${{ matrix.platform }}\rel\plugins\hcpython38.dll" (
|
||||
echo hcpython38.dll was not built
|
||||
exit /b 1
|
||||
)
|
||||
if not exist "..\zoitechat-build\${{ matrix.platform }}\rel\_cffi_backend.cp38*.pyd" (
|
||||
echo _cffi_backend for Python 3.8 was not staged for the installer
|
||||
exit /b 1
|
||||
)
|
||||
shell: cmd
|
||||
|
||||
- name: Test emoji catalog, font coverage and picker
|
||||
shell: cmd
|
||||
run: |
|
||||
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\Tools\VsDevCmd.bat"
|
||||
set "PATH=%CD%\..\zoitechat-build\x64\rel;%PATH%"
|
||||
set "GDK_PIXBUF_MODULE_FILE=%CD%\..\zoitechat-build\x64\rel\lib\gdk-pixbuf-2.0\2.10.0\loaders.cache"
|
||||
set "ZOITECHAT_EMOJI_FONT=%CD%\..\zoitechat-build\x64\rel\share\fonts\zoitechat\NotoColorEmoji.ttf"
|
||||
fc /b data\fonts\NotoColorEmoji.ttf "%ZOITECHAT_EMOJI_FONT%"
|
||||
if errorlevel 1 exit /b 1
|
||||
for %%T in (data font ui) do (
|
||||
msbuild win32\emoji-tests.vcxproj /m /verbosity:minimal /p:Configuration=Release /p:Platform=x64 /p:EmojiTestKind=%%T
|
||||
if errorlevel 1 exit /b 1
|
||||
..\zoitechat-build\x64\tests\emoji-%%T-tests.exe --tap
|
||||
if errorlevel 1 exit /b 1
|
||||
)
|
||||
|
||||
- name: Preparing Artifacts
|
||||
run: |
|
||||
move ..\zoitechat-build\${{ matrix.platform }}\ZoiteChat*.exe .\
|
||||
move ..\zoitechat-build\${{ matrix.platform }}\ZoiteChat-*.exe .\
|
||||
move ..\zoitechat-build .\
|
||||
shell: cmd
|
||||
|
||||
- name: Upload Installer
|
||||
id: upload_installer
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: Installer ${{ matrix.arch }}
|
||||
path: ZoiteChat*.exe
|
||||
path: ZoiteChat-*.exe
|
||||
|
||||
- name: Attest Installer (Artifact Attestation)
|
||||
if: ${{ github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository }}
|
||||
@@ -113,7 +236,7 @@ jobs:
|
||||
|
||||
- name: Upload Build Files
|
||||
id: upload_buildfiles
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: Build Files ${{ matrix.arch }}
|
||||
path: zoitechat-build
|
||||
|
||||
@@ -0,0 +1,428 @@
|
||||
name: Windows MSI/MSIX Build
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- 'release/**'
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
windows_msi_build:
|
||||
runs-on: windows-2022
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
id-token: write
|
||||
attestations: write
|
||||
artifact-metadata: write
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
platform: [x64]
|
||||
arch: [x64]
|
||||
fail-fast: false
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v7
|
||||
|
||||
- uses: actions/setup-python@v7
|
||||
with:
|
||||
python-version: '3.14.3'
|
||||
architecture: ${{ matrix.arch }}
|
||||
|
||||
- name: Install Dependencies
|
||||
shell: pwsh
|
||||
run: |
|
||||
New-Item -Name "deps" -ItemType "Directory" -Force | Out-Null
|
||||
|
||||
python -m pip install --upgrade pip
|
||||
python -m pip install cffi
|
||||
python -m pip install zstandard
|
||||
|
||||
$ProgressPreference = 'SilentlyContinue'
|
||||
function Download-WithRetry {
|
||||
param(
|
||||
[string]$Url,
|
||||
[string]$OutFile,
|
||||
[int]$MaxAttempts = 5,
|
||||
[int]$InitialDelaySeconds = 2
|
||||
)
|
||||
for ($attempt = 1; $attempt -le $MaxAttempts; $attempt++) {
|
||||
try {
|
||||
Invoke-WebRequest -Uri $Url -OutFile $OutFile -ErrorAction Stop
|
||||
return
|
||||
}
|
||||
catch {
|
||||
if ($attempt -eq $MaxAttempts) {
|
||||
throw
|
||||
}
|
||||
Start-Sleep -Seconds ($InitialDelaySeconds * [math]::Pow(2, $attempt - 1))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# The existing solution includes installer.vcxproj, so Inno Setup is
|
||||
# still required to build the unmodified solution. This workflow does
|
||||
# not publish that EXE; it packages the same staged rel tree as MSI/MSIX.
|
||||
Download-WithRetry -Url https://github.com/jrsoftware/issrc/releases/download/is-6_7_1/innosetup-6.7.1.exe -OutFile deps\innosetup-unicode.exe
|
||||
& deps\innosetup-unicode.exe /VERYSILENT | Out-Null
|
||||
|
||||
# Use the same GTK runtime as the existing Windows EXE workflow.
|
||||
Download-WithRetry -Url https://github.com/ZoiteChat/gvsbuild/releases/download/zoitechat-2.20.0-alpha.1/GTK3_Gvsbuild_zoitechat-2.20.0-alpha.1_x64.zip -OutFile deps\gtk-${{ matrix.arch }}.zip
|
||||
Expand-Archive -LiteralPath deps\gtk-${{ matrix.arch }}.zip -DestinationPath C:\gtk-build\gtk\x64\release -Force
|
||||
|
||||
# The GTK3 bundle does not contain librsvg. Restore the renderer,
|
||||
# pixbuf loader, and license from the matching GTK4 bundle. Do not
|
||||
# replace the rest of the GTK3 runtime with GTK4 libraries.
|
||||
Download-WithRetry -Url https://github.com/ZoiteChat/gvsbuild/releases/download/zoitechat-2.20.0-alpha.1/GTK4_Gvsbuild_zoitechat-2.20.0-alpha.1_x64.zip -OutFile deps\svg-runtime.zip
|
||||
if ((Get-FileHash deps\svg-runtime.zip -Algorithm SHA256).Hash -ne 'fb657f9ebae3a6807defb15e66091d643a703ee66cb37488e3e11e5646f45adb') {
|
||||
throw 'Unexpected SVG runtime archive checksum'
|
||||
}
|
||||
$svgArchive = [System.IO.Compression.ZipFile]::OpenRead((Resolve-Path deps\svg-runtime.zip))
|
||||
try {
|
||||
foreach ($name in @('bin/rsvg-2-2.dll', 'lib/gdk-pixbuf-2.0/2.10.0/loaders/pixbufloader_svg.dll', 'share/doc/librsvg/COPYING.LIB')) {
|
||||
$entry = $svgArchive.GetEntry($name)
|
||||
if ($null -eq $entry) { throw "Missing SVG runtime file: $name" }
|
||||
$destination = Join-Path 'C:\gtk-build\gtk\x64\release' $name
|
||||
New-Item -ItemType Directory -Path (Split-Path $destination) -Force | Out-Null
|
||||
[System.IO.Compression.ZipFileExtensions]::ExtractToFile($entry, $destination, $true)
|
||||
}
|
||||
}
|
||||
finally { $svgArchive.Dispose() }
|
||||
|
||||
# Ensure SVG remains loadable before compiling or packaging.
|
||||
& C:\gtk-build\gtk\x64\release\bin\gdk-pixbuf-query-loaders.exe --update-cache
|
||||
if ($LASTEXITCODE -ne 0) { throw 'Could not generate the pixbuf loader cache' }
|
||||
if (-not (Select-String -LiteralPath 'C:\gtk-build\gtk\x64\release\lib\gdk-pixbuf-2.0\2.10.0\loaders.cache' -SimpleMatch '"svg"')) {
|
||||
throw 'SVG loader could not be loaded with the GTK3 runtime'
|
||||
}
|
||||
|
||||
Download-WithRetry -Url https://repo.msys2.org/mingw/x86_64/mingw-w64-x86_64-hicolor-icon-theme-0.18-1-any.pkg.tar.zst -OutFile deps\hicolor-icon-theme.pkg.tar.zst
|
||||
python -c "import tarfile,zstandard,pathlib;archive=pathlib.Path(r'deps\\hicolor-icon-theme.pkg.tar.zst');target=pathlib.Path(r'C:\\gtk-build\\gtk\\x64\\release');dctx=zstandard.ZstdDecompressor();f=archive.open('rb');reader=dctx.stream_reader(f);tf=tarfile.open(fileobj=reader,mode='r|');[tf.extract(m,path=target) for m in tf if m.name.startswith('mingw64/share/icons/hicolor/')];tf.close();reader.close();f.close()"
|
||||
|
||||
Download-WithRetry -Url https://repo.msys2.org/mingw/x86_64/mingw-w64-x86_64-libarchive-3.8.6-1-any.pkg.tar.zst -OutFile deps\libarchive.pkg.tar.zst
|
||||
python -c "import tarfile,zstandard,pathlib;archive=pathlib.Path(r'deps\\libarchive.pkg.tar.zst');target=pathlib.Path(r'C:\\gtk-build\\gtk\\x64\\release');dctx=zstandard.ZstdDecompressor();f=archive.open('rb');reader=dctx.stream_reader(f);tf=tarfile.open(fileobj=reader,mode='r|');[tf.extract(m,path=target) for m in tf if m.name.startswith(('mingw64/include/archive','mingw64/lib/libarchive','mingw64/bin/libarchive'))];tf.close();reader.close();f.close()"
|
||||
|
||||
if (Test-Path C:\gtk-build\gtk\x64\release\mingw64\share\icons\hicolor) {
|
||||
New-Item -Path C:\gtk-build\gtk\x64\release\share\icons -ItemType Directory -Force | Out-Null
|
||||
Copy-Item -Path C:\gtk-build\gtk\x64\release\mingw64\share\icons\hicolor -Destination C:\gtk-build\gtk\x64\release\share\icons\hicolor -Recurse -Force
|
||||
}
|
||||
if (Test-Path C:\gtk-build\gtk\x64\release\mingw64\include) {
|
||||
New-Item -Path C:\gtk-build\gtk\x64\release\include -ItemType Directory -Force | Out-Null
|
||||
Copy-Item -Path C:\gtk-build\gtk\x64\release\mingw64\include\archive* -Destination C:\gtk-build\gtk\x64\release\include -Recurse -Force
|
||||
}
|
||||
if (Test-Path C:\gtk-build\gtk\x64\release\mingw64\lib) {
|
||||
New-Item -Path C:\gtk-build\gtk\x64\release\lib -ItemType Directory -Force | Out-Null
|
||||
Copy-Item -Path C:\gtk-build\gtk\x64\release\mingw64\lib\libarchive* -Destination C:\gtk-build\gtk\x64\release\lib -Force
|
||||
}
|
||||
if (Test-Path C:\gtk-build\gtk\x64\release\mingw64\bin) {
|
||||
New-Item -Path C:\gtk-build\gtk\x64\release\bin -ItemType Directory -Force | Out-Null
|
||||
Copy-Item -Path C:\gtk-build\gtk\x64\release\mingw64\bin\libarchive*.dll -Destination C:\gtk-build\gtk\x64\release\bin -Force
|
||||
}
|
||||
if (Test-Path C:\gtk-build\gtk\x64\release\mingw64) {
|
||||
Remove-Item -Path C:\gtk-build\gtk\x64\release\mingw64 -Recurse -Force
|
||||
}
|
||||
|
||||
Download-WithRetry -Url https://github.com/ZoiteChat/gvsbuild/releases/download/zoitechat-2.18.0-pre4/gendef20260315.7z -OutFile deps\gendef.7z
|
||||
& 7z.exe x deps\gendef.7z -oC:\gtk-build
|
||||
|
||||
Download-WithRetry -Url https://github.com/ZoiteChat/gvsbuild/releases/download/zoitechat-2.18.0-pre4/WinSparkle-20260315.7z -OutFile deps\WinSparkle.7z
|
||||
& 7z.exe x deps\WinSparkle.7z -oC:\gtk-build\WinSparkle
|
||||
|
||||
Download-WithRetry -Url https://github.com/ZoiteChat/gvsbuild/releases/download/zoitechat-2.18.0-pre4/perl-5.42.0.1-${{ matrix.arch }}.7z -OutFile deps\perl-${{ matrix.arch }}.7z
|
||||
& 7z.exe x deps\perl-${{ matrix.arch }}.7z -oC:\gtk-build\perl-5.42.0.1\${{ matrix.platform }}
|
||||
|
||||
$pyRoot = $env:pythonLocation
|
||||
if (-not $pyRoot) { $pyRoot = & python -c "import sys; print(sys.prefix)" }
|
||||
|
||||
foreach ($pyDir in @("C:\gtk-build\python-3.14.3", "C:\gtk-build\python-3.14")) {
|
||||
New-Item -Path $pyDir -ItemType Directory -Force | Out-Null
|
||||
$target = Join-Path $pyDir "${{ matrix.platform }}"
|
||||
if (Test-Path $target) { Remove-Item $target -Recurse -Force }
|
||||
New-Item -Path $pyDir -Name "${{ matrix.platform }}" -ItemType Junction -Value $pyRoot | Out-Null
|
||||
}
|
||||
|
||||
- uses: actions/setup-python@v7
|
||||
with:
|
||||
python-version: '3.8.10'
|
||||
architecture: ${{ matrix.arch }}
|
||||
|
||||
- name: Prepare Python 3.8
|
||||
shell: pwsh
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
python -m pip install cffi
|
||||
|
||||
$pyRoot = $env:pythonLocation
|
||||
if (-not $pyRoot) { $pyRoot = & python -c "import sys; print(sys.prefix)" }
|
||||
|
||||
foreach ($pyDir in @("C:\gtk-build\python-3.8.10", "C:\gtk-build\python-3.8")) {
|
||||
New-Item -Path $pyDir -ItemType Directory -Force | Out-Null
|
||||
$target = Join-Path $pyDir "${{ matrix.platform }}"
|
||||
if (Test-Path $target) { Remove-Item $target -Recurse -Force }
|
||||
New-Item -Path $pyDir -Name "${{ matrix.platform }}" -ItemType Junction -Value $pyRoot | Out-Null
|
||||
}
|
||||
|
||||
- name: Build
|
||||
shell: cmd
|
||||
run: |
|
||||
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\Tools\VsDevCmd.bat"
|
||||
|
||||
set "PYTHON_DIR=C:\gtk-build\python-3.14.3\${{ matrix.platform }}"
|
||||
if not exist "%PYTHON_DIR%\libs\python314.lib" (
|
||||
echo Missing %PYTHON_DIR%\libs\python314.lib
|
||||
dir "%PYTHON_DIR%\libs"
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
set "PYTHON38_DIR=C:\gtk-build\python-3.8\${{ matrix.platform }}"
|
||||
if not exist "%PYTHON38_DIR%\libs\python38.lib" (
|
||||
echo Missing %PYTHON38_DIR%\libs\python38.lib
|
||||
dir "%PYTHON38_DIR%\libs"
|
||||
exit /b 1
|
||||
)
|
||||
if not exist "%PYTHON38_DIR%\Lib\site-packages\_cffi_backend.cp38*.pyd" (
|
||||
echo Missing %PYTHON38_DIR%\Lib\site-packages\_cffi_backend.cp38*.pyd
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
set "LIB=%PYTHON_DIR%\libs;%LIB%"
|
||||
set "INCLUDE=%PYTHON_DIR%\include;%INCLUDE%"
|
||||
|
||||
powershell -NoProfile -ExecutionPolicy Bypass -Command "$archiveLib='C:\gtk-build\gtk\x64\release\lib\libarchive.lib'; if (-not (Test-Path $archiveLib)) { $archiveDll = Get-ChildItem 'C:\gtk-build\gtk\x64\release\bin\libarchive*.dll' | Select-Object -First 1; if ($archiveDll) { Push-Location 'C:\gtk-build\gtk\x64\release\lib'; & 'C:\gtk-build\gendef\gendef.exe' $archiveDll.FullName | Out-Null; $archiveDef = Get-ChildItem 'libarchive*.def' | Select-Object -First 1; if ($archiveDef) { & lib /def:$archiveDef.Name /machine:${{ matrix.platform }} /out:libarchive.lib | Out-Null }; Pop-Location } }"
|
||||
|
||||
msbuild win32\zoitechat.sln /m /verbosity:minimal /p:Configuration=Release /p:Platform=${{ matrix.platform }}
|
||||
if errorlevel 1 exit /b 1
|
||||
|
||||
if not exist "..\zoitechat-build\${{ matrix.platform }}\rel\plugins\hcpython38.dll" (
|
||||
echo hcpython38.dll was not built
|
||||
exit /b 1
|
||||
)
|
||||
if not exist "..\zoitechat-build\${{ matrix.platform }}\rel\_cffi_backend.cp38*.pyd" (
|
||||
echo _cffi_backend for Python 3.8 was not staged for the installer
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
# Master added native emoji font staging and tests after the release
|
||||
# branch split. Run these before packaging so MSI/MSIX use verified files.
|
||||
- name: Test emoji catalog, font coverage and picker
|
||||
shell: cmd
|
||||
run: |
|
||||
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\Tools\VsDevCmd.bat"
|
||||
set "PATH=%CD%\..\zoitechat-build\x64\rel;%PATH%"
|
||||
set "GDK_PIXBUF_MODULE_FILE=%CD%\..\zoitechat-build\x64\rel\lib\gdk-pixbuf-2.0\2.10.0\loaders.cache"
|
||||
set "ZOITECHAT_EMOJI_FONT=%CD%\..\zoitechat-build\x64\rel\share\fonts\zoitechat\NotoColorEmoji.ttf"
|
||||
fc /b data\fonts\NotoColorEmoji.ttf "%ZOITECHAT_EMOJI_FONT%"
|
||||
if errorlevel 1 exit /b 1
|
||||
for %%T in (data font ui) do (
|
||||
msbuild win32\emoji-tests.vcxproj /m /verbosity:minimal /p:Configuration=Release /p:Platform=x64 /p:EmojiTestKind=%%T
|
||||
if errorlevel 1 exit /b 1
|
||||
..\zoitechat-build\x64\tests\emoji-%%T-tests.exe --tap
|
||||
if errorlevel 1 exit /b 1
|
||||
)
|
||||
|
||||
- name: Install WiX Toolset
|
||||
shell: pwsh
|
||||
run: |
|
||||
$ErrorActionPreference = 'Stop'
|
||||
# Keep this pinned. WiX v6 introduced OSMF terms and WiX v7 adds
|
||||
# explicit EULA acceptance; do not silently accept new terms in CI.
|
||||
dotnet tool install --tool-path .wix wix --version 5.0.2
|
||||
if ($LASTEXITCODE -ne 0) { throw 'Failed to install WiX Toolset 5.0.2' }
|
||||
& .\.wix\wix.exe --version
|
||||
if ($LASTEXITCODE -ne 0) { throw 'WiX Toolset could not be executed' }
|
||||
|
||||
- name: Build MSI
|
||||
id: build_msi
|
||||
shell: pwsh
|
||||
run: |
|
||||
$ErrorActionPreference = 'Stop'
|
||||
|
||||
$rawVersion = (Get-Content VERSION -Raw).Trim()
|
||||
if ($rawVersion -notmatch '^(\d+)\.(\d+)\.(\d+)') {
|
||||
throw "VERSION '$rawVersion' does not begin with an MSI-compatible major.minor.patch version"
|
||||
}
|
||||
|
||||
# Keep the full development version in the filename, while MSI's
|
||||
# ProductVersion is numeric (e.g. 2.20.0-dev -> 2.20.0).
|
||||
$msiVersion = "$($Matches[1]).$($Matches[2]).$($Matches[3])"
|
||||
$safeVersion = $rawVersion -replace '[^0-9A-Za-z._-]', '-'
|
||||
$sourceDir = (Resolve-Path "..\zoitechat-build\${{ matrix.platform }}\rel").Path
|
||||
$outputPath = Join-Path $PWD "ZoiteChat-${safeVersion}_${{ matrix.arch }}.msi"
|
||||
|
||||
if (-not (Test-Path (Join-Path $sourceDir 'zoitechat.exe'))) {
|
||||
throw "Staged ZoiteChat executable is missing from $sourceDir"
|
||||
}
|
||||
|
||||
& .\.wix\wix.exe build win32\wix\zoitechat.wxs `
|
||||
-arch x64 `
|
||||
-d "SourceDir=$sourceDir" `
|
||||
-d "ProductVersion=$msiVersion" `
|
||||
-out $outputPath
|
||||
if ($LASTEXITCODE -ne 0) { throw 'WiX MSI build failed' }
|
||||
|
||||
if (-not (Test-Path $outputPath)) {
|
||||
throw "Expected MSI was not created: $outputPath"
|
||||
}
|
||||
|
||||
"path=$outputPath" >> $env:GITHUB_OUTPUT
|
||||
"filename=$(Split-Path $outputPath -Leaf)" >> $env:GITHUB_OUTPUT
|
||||
|
||||
- name: Test MSI administrative extraction
|
||||
shell: pwsh
|
||||
run: |
|
||||
$ErrorActionPreference = 'Stop'
|
||||
$msi = '${{ steps.build_msi.outputs.path }}'
|
||||
$adminImage = Join-Path $PWD 'msi-admin-image'
|
||||
New-Item -ItemType Directory -Path $adminImage -Force | Out-Null
|
||||
|
||||
$arguments = "/a `"$msi`" /qn TARGETDIR=`"$adminImage`""
|
||||
$process = Start-Process -FilePath msiexec.exe -ArgumentList $arguments -Wait -PassThru
|
||||
if ($process.ExitCode -ne 0) {
|
||||
throw "MSI administrative extraction failed with exit code $($process.ExitCode)"
|
||||
}
|
||||
|
||||
foreach ($requiredFile in @(
|
||||
'zoitechat.exe',
|
||||
'hclua.dll',
|
||||
'hcupd.dll',
|
||||
'WinSparkle.dll',
|
||||
'hcchecksum.dll',
|
||||
'hcexec.dll',
|
||||
'hcfishlim.dll',
|
||||
'hcsysinfo.dll',
|
||||
'system.png',
|
||||
'hcperl.dll',
|
||||
'hcpython3.dll',
|
||||
'hcpython38.dll',
|
||||
'NotoColorEmoji.ttf',
|
||||
'OFL.txt'
|
||||
)) {
|
||||
$match = Get-ChildItem -Path $adminImage -Filter $requiredFile -File -Recurse | Select-Object -First 1
|
||||
if ($null -eq $match) {
|
||||
throw "Administrative image does not contain required normal-install file: $requiredFile"
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($requiredPattern in @('_cffi_backend.cp314*.pyd', '_cffi_backend.cp38*.pyd')) {
|
||||
$match = Get-ChildItem -Path $adminImage -Filter $requiredPattern -File -Recurse | Select-Object -First 1
|
||||
if ($null -eq $match) {
|
||||
throw "Administrative image does not contain required Python support file: $requiredPattern"
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($requiredPythonFile in @('zoitechat.py', '_zoitechat.py', 'hexchat.py', 'xchat.py')) {
|
||||
$match = Get-ChildItem -Path $adminImage -Filter $requiredPythonFile -File -Recurse |
|
||||
Where-Object { $_.Directory.Name -eq 'python' } |
|
||||
Select-Object -First 1
|
||||
if ($null -eq $match) {
|
||||
throw "Administrative image does not contain required Python bridge file: $requiredPythonFile"
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($excludedFile in @(
|
||||
'portable-mode',
|
||||
'zoitechat-text.exe'
|
||||
)) {
|
||||
$match = Get-ChildItem -Path $adminImage -Filter $excludedFile -File -Recurse | Select-Object -First 1
|
||||
if ($null -ne $match) {
|
||||
throw "MSI incorrectly contains Inno custom/portable-only file: $excludedFile"
|
||||
}
|
||||
}
|
||||
|
||||
- name: Build MSIX
|
||||
id: build_msix
|
||||
shell: pwsh
|
||||
run: |
|
||||
$ErrorActionPreference = 'Stop'
|
||||
|
||||
$rawVersion = (Get-Content VERSION -Raw).Trim()
|
||||
if ($rawVersion -notmatch '^(\d+)\.(\d+)\.(\d+)') {
|
||||
throw "VERSION '$rawVersion' does not begin with a Store-compatible major.minor.build version"
|
||||
}
|
||||
|
||||
$versionParts = @(
|
||||
[int]$Matches[1],
|
||||
[int]$Matches[2],
|
||||
[int]$Matches[3]
|
||||
)
|
||||
if ($versionParts[0] -eq 0) {
|
||||
throw 'The Microsoft Store requires a non-zero major package version.'
|
||||
}
|
||||
foreach ($part in $versionParts) {
|
||||
if ($part -lt 0 -or $part -gt 65535) {
|
||||
throw "MSIX version component '$part' is outside the Store-supported 0-65535 range."
|
||||
}
|
||||
}
|
||||
|
||||
# Partner Center reserves the fourth field as 0. A -dev version
|
||||
# is packaged as a valid 2.20.0.0, without changing VERSION.
|
||||
$packageVersion = "$($versionParts[0]).$($versionParts[1]).$($versionParts[2]).0"
|
||||
$safeVersion = $rawVersion -replace '[^0-9A-Za-z._-]', '-'
|
||||
$sourceDir = (Resolve-Path "..\zoitechat-build\${{ matrix.platform }}\rel").Path
|
||||
$outputPath = Join-Path $PWD "ZoiteChat-${safeVersion}_${{ matrix.arch }}.msix"
|
||||
|
||||
# Reserved ZoiteChat identity from the release branch. Adjust only
|
||||
# if the Product identity page in Partner Center changes.
|
||||
$identityName = 'deependtilde.ZoiteChat'
|
||||
$publisher = 'CN=6C7766BB-6AC6-488B-A09E-E3F8E68E63E4'
|
||||
$publisherDisplayName = 'deepend_tilde'
|
||||
$artifactName = 'MSIX Store Package ${{ matrix.arch }}'
|
||||
|
||||
Write-Host "Building Store MSIX for identity: $identityName"
|
||||
|
||||
& .\win32\msix\build-msix.ps1 `
|
||||
-SourceDir $sourceDir `
|
||||
-OutputPath $outputPath `
|
||||
-PackageVersion $packageVersion `
|
||||
-IdentityName $identityName `
|
||||
-Publisher $publisher `
|
||||
-PublisherDisplayName $publisherDisplayName `
|
||||
-SelfSign
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
throw 'MSIX build script failed'
|
||||
}
|
||||
|
||||
if (-not (Test-Path $outputPath)) {
|
||||
throw "Expected MSIX was not created: $outputPath"
|
||||
}
|
||||
|
||||
"path=$outputPath" >> $env:GITHUB_OUTPUT
|
||||
"filename=$(Split-Path $outputPath -Leaf)" >> $env:GITHUB_OUTPUT
|
||||
"package_version=$packageVersion" >> $env:GITHUB_OUTPUT
|
||||
"store_ready=true" >> $env:GITHUB_OUTPUT
|
||||
"artifact_name=$artifactName" >> $env:GITHUB_OUTPUT
|
||||
|
||||
- name: Upload MSI Installer
|
||||
id: upload_msi
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: MSI Installer ${{ matrix.arch }}
|
||||
path: ${{ steps.build_msi.outputs.path }}
|
||||
if-no-files-found: error
|
||||
|
||||
- name: Attest MSI Installer (Artifact Attestation)
|
||||
if: ${{ github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository }}
|
||||
uses: actions/attest-build-provenance@v3
|
||||
with:
|
||||
subject-name: MSI Installer ${{ matrix.arch }}
|
||||
subject-digest: sha256:${{ steps.upload_msi.outputs.artifact-digest }}
|
||||
|
||||
- name: Upload MSIX Package
|
||||
id: upload_msix
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: ${{ steps.build_msix.outputs.artifact_name }}
|
||||
path: ${{ steps.build_msix.outputs.path }}
|
||||
if-no-files-found: error
|
||||
|
||||
- name: Attest MSIX Package (Artifact Attestation)
|
||||
if: ${{ github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository }}
|
||||
uses: actions/attest-build-provenance@v3
|
||||
with:
|
||||
subject-name: ${{ steps.build_msix.outputs.artifact_name }}
|
||||
subject-digest: sha256:${{ steps.upload_msix.outputs.artifact-digest }}
|
||||
@@ -27,3 +27,9 @@ osx/.ZoiteChat.app
|
||||
*.dmg
|
||||
*.VC.db
|
||||
*.VC.opendb
|
||||
|
||||
# Native macOS packaging output
|
||||
/build-macos*/
|
||||
/dist/
|
||||
/packaging/macos/__pycache__/
|
||||
/packaging/macos/tests/__pycache__/
|
||||
@@ -0,0 +1,7 @@
|
||||
version: 2
|
||||
sphinx:
|
||||
configuration: 'docs/conf.py'
|
||||
build:
|
||||
os: 'ubuntu-22.04'
|
||||
tools:
|
||||
python: '3.11'
|
||||
@@ -1,8 +1,8 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||
51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
|
||||
<https://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
@@ -15,7 +15,7 @@ software--to make sure the software is free for all its users. This
|
||||
General Public License applies to most of the Free Software
|
||||
Foundation's software and to any other program whose authors commit to
|
||||
using it. (Some other Free Software Foundation software is covered by
|
||||
the GNU Library General Public License instead.) You can apply it to
|
||||
the GNU Lesser General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
@@ -55,7 +55,7 @@ patent must be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
@@ -110,7 +110,7 @@ above, provided that you also meet all of these conditions:
|
||||
License. (Exception: if the Program itself is interactive but
|
||||
does not normally print such an announcement, your work based on
|
||||
the Program is not required to print an announcement.)
|
||||
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program,
|
||||
and can be reasonably considered independent and separate works in
|
||||
@@ -168,7 +168,7 @@ access to copy from a designated place, then offering equivalent
|
||||
access to copy the source code from the same place counts as
|
||||
distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program is
|
||||
@@ -225,7 +225,7 @@ impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Program under this License
|
||||
@@ -278,7 +278,7 @@ PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
@@ -291,7 +291,7 @@ convey the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) 19yy <name of author>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -303,17 +303,15 @@ the "copyright" line and a pointer to where the full notice is found.
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with this program; if not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program is interactive, make it output a short notice like this
|
||||
when it starts in an interactive mode:
|
||||
|
||||
Gnomovision version 69, Copyright (C) 19yy name of author
|
||||
Gnomovision version 69, Copyright (C) year name of author
|
||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
@@ -330,11 +328,34 @@ necessary. Here is a sample; alter the names:
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1989
|
||||
Ty Coon, President of Vice
|
||||
<signature of Moe Ghoul>, 1 April 1989
|
||||
Moe Ghoul, President of Vice
|
||||
|
||||
This General Public License does not permit incorporating your program into
|
||||
proprietary programs. If your program is a subroutine library, you may
|
||||
consider it more useful to permit linking proprietary applications with the
|
||||
library. If this is what you want to do, use the GNU Library General
|
||||
library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License.
|
||||
|
||||
|
||||
|
||||
======================================================================
|
||||
ADDITIONAL LICENSE NOTICE
|
||||
======================================================================
|
||||
|
||||
ZoiteChat source code:
|
||||
GPL version 2
|
||||
See Above.
|
||||
|
||||
Unicode Emoji and CLDR data:
|
||||
Unicode License v3
|
||||
data/emoji/LICENSE-UNICODE.txt
|
||||
|
||||
gemoji shortcode data:
|
||||
MIT License
|
||||
Copyright (c) 2019 GitHub, Inc.
|
||||
data/emoji/LICENSE-GEMOJI.txt
|
||||
|
||||
Noto Color Emoji:
|
||||
SIL Open Font License 1.1
|
||||
data/fonts/OFL.txt
|
||||
@@ -2,7 +2,9 @@ PREFIX ?= /usr/local
|
||||
BUILD_DIR ?= build
|
||||
MESON ?= meson
|
||||
NINJA ?= ninja
|
||||
C_STD ?= c17
|
||||
MESON_SETUP_ARGS ?=
|
||||
MESON_SETUP_ARGS += -Dc_std=$(C_STD)
|
||||
MESON_COMPILE_ARGS ?=
|
||||
MESON_INSTALL_ARGS ?=
|
||||
|
||||
@@ -12,7 +14,6 @@ CONFIG_STAMP := $(BUILD_DIR)/build.ninja
|
||||
|
||||
all: build
|
||||
|
||||
# Only run initial meson setup if we don't have a configured build dir yet.
|
||||
$(CONFIG_STAMP):
|
||||
@mkdir -p $(BUILD_DIR)
|
||||
@env NINJA=$(NINJA) $(MESON) setup $(BUILD_DIR) --prefix=$(PREFIX) $(MESON_SETUP_ARGS)
|
||||
|
||||
@@ -1,6 +1,181 @@
|
||||
ZoiteChat ChangeLog
|
||||
=================
|
||||
|
||||
2.19.0 (2026-07-28)
|
||||
-------------------
|
||||
|
||||
- Added Python 3.8 compatibility for older Windows releases.
|
||||
- Added on-demand SASL password prompts, including renewed prompts after reconnecting.
|
||||
- Corrected NickServ authentication to use the decrypted password for the active network.
|
||||
- Made system theme matching the default and polished GTK3 theme integration.
|
||||
- Applied more settings changes immediately, reducing the need to restart ZoiteChat.
|
||||
- Added descriptive tooltips to the color picker choices and refined default text-event colors.
|
||||
- Stabilized channel tree font handling across palette and theme updates.
|
||||
- Corrected the chat scrollbar increment used by its arrow buttons.
|
||||
- Improved Windows URL launching through the native shell.
|
||||
- Restored expected minimize behavior when clicking ZoiteChat on the Windows taskbar.
|
||||
|
||||
2.18.3 (2026-06-29)
|
||||
-------------------
|
||||
|
||||
- Added IRCv3 support for message tags, echo-message, typing notifications, and replies.
|
||||
- Restored the accept-invalid-cert TLS bypass behavior.
|
||||
- Replaced legacy IPv4 APIs and added support for OpenSSL 4 APIs.
|
||||
- Snapshot Python hooks during plugin unload for safer plugin shutdown.
|
||||
- Fixed Windows GtkStatusIcon tray menu popup behavior.
|
||||
- Fixed self-echoed private messages routing to the target tab.
|
||||
- Fixed the lag ping timeout window.
|
||||
|
||||
2.18.2 (2026-06-20)
|
||||
-------------------
|
||||
|
||||
- Improved security and connection handling with stronger TLS defaults,
|
||||
safer certificate/hostname validation, FiSHLiM OpenSSL fixes, keyring support,
|
||||
and getaddrinfo-based DCC lookups.
|
||||
- Expanded FiSHLiM usability with a GTK key manager, context-menu access, and clearer
|
||||
channel/private-message key handling.
|
||||
- Improved keyboard and navigation behavior with customizable keybinds, reset support,
|
||||
channel-name switching, /server -noproxy, and configurable stale-link ping checks.
|
||||
- Refined the GTK interface with native file chooser dialogs, topic layout preferences,
|
||||
timestamp/date hover tooltips, better restore-down relayout, text scroll speed controls,
|
||||
and aligned network meters.
|
||||
- Added privacy and display options, including hiding join/part hostmasks and improved
|
||||
topic/multiline mode layout controls.
|
||||
- Fixed several platform/UI edge cases, including tray restore from iconified state, DBus unload
|
||||
handling, GTK3 theme refresh/saving, and tab switcher compatibility.
|
||||
|
||||
2.18.1 (2026-05-21)
|
||||
-------------------
|
||||
|
||||
- Migrated D-Bus handling to GDBus.
|
||||
- Enabled mouse wheel channel switching by default and consumed handled tab wheel events.
|
||||
- Switched main panes to native GTK scrollbars.
|
||||
- Tightened userlist button and meter layout.
|
||||
- Made the native Windows file chooser modal.
|
||||
- Set the Windows AppUserModelID before GTK startup.
|
||||
- Updated Windows CI to use the new GTK3 bundle zip.
|
||||
- Updated Windows installer architecture checks to use x64-compatible detection.
|
||||
- Bumped the Flatpak Perl runtime to 5.42.2.
|
||||
- Fixed palette color reads to preserve base GTK state.
|
||||
- Fixed auto-replace whole-word matching.
|
||||
- Fixed checksum file stream cleanup.
|
||||
- Fixed byte handling in the Python console.
|
||||
- Guarded GTK drag-and-drop handlers against null windows.
|
||||
- Fixed size_t and integer handling issues.
|
||||
- Removed the Winamp plugin.
|
||||
|
||||
2.18.0 (2026-04-20)
|
||||
-------------------
|
||||
|
||||
- Added optional close buttons on tabs.
|
||||
- Added Ctrl+W to close tabs and Ctrl+Shift+T to reopen recently closed tabs.
|
||||
- Expanded theme import support with .hct support in colors.conf import.
|
||||
- Added pevent import support from .hct theme files and improved import result messaging.
|
||||
- Expanded palette and selection CSS styling for better theme consistency.
|
||||
- Auto-sizes the topic bar to wrapped text for better multi-line topic handling.
|
||||
- Refined command-character parsing when pasting path-like text.
|
||||
- Tightened topic link detection and opening rules.
|
||||
- Added Public Suffix List validation for host links to reduce bad link matches.
|
||||
- Improved channel tree behavior by ignoring collapsed parent selections.
|
||||
- Sanitized the Linux open environment for AppImage builds and added safer fallback handling.
|
||||
- Labeled Windows installer runtimes with exact versions.
|
||||
- Fixed the notification icon and corrected the Flatpak screenshot asset.
|
||||
- Improved AppStream metainfo validation.
|
||||
|
||||
2.18.0~pre6 (2026-03-30)
|
||||
------------------------
|
||||
|
||||
- Applied app theme CSS to the menubar consistently across the app.
|
||||
- Restored horizontal separator lines in menus.
|
||||
- Improved Windows installer VC++ redistributable handling by failing loudly when missing and using the official Microsoft download endpoint.
|
||||
- Fixed Windows locale path resolution in both GTK and text frontends.
|
||||
- Fixed duplicate dialog buttons persisting in the UI.
|
||||
- Fixed GTK auto-replace cursor snapback.
|
||||
- Restored hiding of formatting control bytes so only formatted output is shown.
|
||||
- Added one-click client SSL certificate tools, including generation with P-256 certificates.
|
||||
- Added client SSL certificate import support in the network editor.
|
||||
- Added 99-color support.
|
||||
- Fixed xtext link hit-testing coordinates.
|
||||
- Fixed short-palette fallback clobbering tab colors.
|
||||
- Lazy-loads Preferences pages on first open for faster dialog startup.
|
||||
- Removed unused UI icons.
|
||||
- Added a None option for resetting the GTK3 theme back to system/default behavior.
|
||||
- Added channel-only mode to Ctrl+F search.
|
||||
- Disabled disk info in sysinfo.
|
||||
- Wrapped the topic bar in a scroller with bounded height.
|
||||
- Added close buttons to tabs.
|
||||
- Fixed fallback GTK menu highlight states.
|
||||
- Applied configured font preferences to the topic bar, channel tree, user list, and input box.
|
||||
|
||||
2.18.0~pre5 (2026-03-22)
|
||||
------------------------
|
||||
- Overhauled preferences/config saving: fully staged and transactional, debounced
|
||||
with flush on close, write failures now surfaced.
|
||||
- Overhauled GTK theme handling: live preview, correct colour reset persistence,
|
||||
proper file:// import paths, consistent menubar CSS.
|
||||
- Fixed GTK entry scroll artifact in the input box.
|
||||
- Hardened tray menu lifetime; fixed stale pointer crash on menu destruction.
|
||||
- Fixed AppIndicator tray init for Wayland/source builds; skip redundant X11
|
||||
tray probe for AppIndicator builds.
|
||||
- Split topic/mode rows in channel bar, tighten spacing, persist userlist column widths.
|
||||
- Preserve saved right-pane size on first layout.
|
||||
- Fixed sounds prefs section.
|
||||
- Fixed chanview tree layout and header alignment; tighten topic URL hit-testing.
|
||||
- Dropped realpath() in favour of GLib-only absolute path build.
|
||||
- Made About dialog links explicit; added GPL licence URL.
|
||||
- Added licence headers to new source files.
|
||||
- Windows installer: fixed VC++ redist URL, added non-plugin download fallback,
|
||||
switched to registry-based runtime detection.
|
||||
- Made libayatana-appindicator a required dep in PKGBUILD.
|
||||
- Cleaned up Meson libperl detection.
|
||||
|
||||
2.18.0~pre4 (2026-03-15)
|
||||
------------------------
|
||||
|
||||
- Fixed a regression where Ctrl+A could incorrectly mark you away instead of selecting all text.
|
||||
- Fixed a crash when toggling the GUI with F9 or the menu toggle action.
|
||||
- Fixed sidebar collapse behavior on fresh installs.
|
||||
- Added multiline topic bar support with clickable URLs.
|
||||
- Improved GTK selection styling so text selection is shown visually on topic and chat text box.
|
||||
|
||||
2.18.0~pre3 (2026-03-13)
|
||||
------------------------
|
||||
|
||||
- Added a major GTK3 theming overhaul with improved theme importing, inheritance, rollback safety, and caching.
|
||||
- Merged theme settings into Appearance and added a new Advanced section.
|
||||
- Added a full color editor and improved widget, chat text, userlist, and tab color handling.
|
||||
- Added `colors.conf` import support and improved compatibility with older themes.
|
||||
- Improved chat background image handling and switched to a native file picker.
|
||||
- Bundled more built-in icons, including OK/Cancel, and improved emoji fallback support.
|
||||
- Embedded the app SVG icon and improved headerbar icon handling.
|
||||
- Fixed KDE Wayland alert flashing.
|
||||
- Fixed tray hide/restore labels so they stay in sync with the real window state.
|
||||
- Fixed several GTK3 styling issues, warning spam, and imported CSS cleanup problems.
|
||||
- Removed menubar icons and simplified Away menu behavior.
|
||||
- Improved Flatpak behavior on KDE and enabled Python/Perl plugin support.
|
||||
- Manual addons now persist properly by being copied into the user addon directory.
|
||||
- Updated `servlist.c` to remove dead servers and added a checker script.
|
||||
|
||||
|
||||
2.18.0~pre2 (2026-02-25)
|
||||
------------------------
|
||||
|
||||
- Added HexChat plugin compatibility improvements.
|
||||
- Fixed the user info right-click menu so it updates properly.
|
||||
- Added support for emoji characters in alert highlights.
|
||||
- clicking links in chat window with appimage build now works.
|
||||
- Removed remaining unused GTK2 code paths.
|
||||
- Continued GTK3 cleanup and packaging alignment work.
|
||||
|
||||
2.18.0-pre1 (2026-02-16)
|
||||
------------------------
|
||||
|
||||
- Switched Debian packaging/builds to GTK 3 (Build-Depends, Meson flags, and package metadata).
|
||||
- Added Debian package split install manifests so files are assigned to the correct binary packages.
|
||||
- Fixed Debian packaging coverage for the man page and MIME XML to avoid unassigned-file (dh_missing) failures.
|
||||
- Updated Debian CI packaging workflow and artifact upload paths for actions/upload-artifact@v4 compatibility.
|
||||
- Improved GTK3 font consistency by applying the configured input font to channel tree and user list theming paths.
|
||||
|
||||
2.17.4 (2026-02-03)
|
||||
-------------------
|
||||
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
UNICODE LICENSE V3
|
||||
|
||||
COPYRIGHT AND PERMISSION NOTICE
|
||||
|
||||
Copyright © 1991-2026 Unicode, Inc.
|
||||
|
||||
NOTICE TO USER: Carefully read the following legal agreement. BY
|
||||
DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR
|
||||
SOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE
|
||||
TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT
|
||||
DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of data files and any associated documentation (the "Data Files") or
|
||||
software and any associated documentation (the "Software") to deal in the
|
||||
Data Files or Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, and/or sell
|
||||
copies of the Data Files or Software, and to permit persons to whom the
|
||||
Data Files or Software are furnished to do so, provided that either (a)
|
||||
this copyright and permission notice appear with all copies of the Data
|
||||
Files or Software, or (b) this copyright and permission notice appear in
|
||||
associated Documentation.
|
||||
|
||||
THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
|
||||
KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
|
||||
THIRD PARTY RIGHTS.
|
||||
|
||||
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE
|
||||
BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES,
|
||||
OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
||||
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
|
||||
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA
|
||||
FILES OR SOFTWARE.
|
||||
|
||||
Except as contained in this notice, the name of a copyright holder shall
|
||||
not be used in advertising or otherwise to promote the sale, use or other
|
||||
dealings in these Data Files or Software without prior written
|
||||
authorization of the copyright holder.
|
||||
@@ -0,0 +1,30 @@
|
||||
# Bundled emoji data
|
||||
|
||||
These are pinned copies of the upstream data files that
|
||||
`tools/gen-emoji-data.py` compiles into ZoiteChat's emoji picker catalog
|
||||
at build time. Bundling them means every ZoiteChat package exposes the
|
||||
same emoji, names, categories and search keywords, independent of the
|
||||
GTK runtime version or the emoji data a distribution installs under
|
||||
`/usr/share/gtk-3.0/emoji`.
|
||||
|
||||
Nothing here affects what is sent over IRC: the picker inserts plain
|
||||
Unicode sequences. Official builds register the bundled Noto Color Emoji
|
||||
font privately for consistent rendering, while preserving platform font
|
||||
fallback if registration is unavailable.
|
||||
|
||||
| File | Source | Version |
|
||||
| ---- | ------ | ------- |
|
||||
| `emoji-test.txt` | [Unicode emoji data](https://unicode.org/Public/emoji/17.0/emoji-test.txt) (mirrored at [unicode-org/unicodetools](https://github.com/unicode-org/unicodetools/blob/main/unicodetools/data/emoji/17.0/emoji-test.txt)) | Emoji 17.0 |
|
||||
| `cldr-annotations-en.xml` | [unicode-org/cldr](https://github.com/unicode-org/cldr/blob/release-48/common/annotations/en.xml) `common/annotations/en.xml` | CLDR release 48 |
|
||||
| `cldr-annotations-derived-en.xml` | [unicode-org/cldr](https://github.com/unicode-org/cldr/blob/release-48/common/annotationsDerived/en.xml) `common/annotationsDerived/en.xml` | CLDR release 48 |
|
||||
| `gemoji.json` | [github/gemoji](https://github.com/github/gemoji/blob/v4.1.0/db/emoji.json) `db/emoji.json` | v4.1.0 |
|
||||
|
||||
The pinned versions are recorded in `VERSIONS`.
|
||||
|
||||
## Licenses
|
||||
|
||||
- `emoji-test.txt`, `cldr-annotations-en.xml`,
|
||||
`cldr-annotations-derived-en.xml`: © Unicode, Inc., distributed under
|
||||
the [Unicode License v3](https://www.unicode.org/license.txt).
|
||||
- `gemoji.json`: from the gemoji project, MIT licensed,
|
||||
© GitHub, Inc.
|
||||
@@ -0,0 +1,6 @@
|
||||
# Pinned versions of the emoji source data in this directory.
|
||||
# Keep in sync with the files themselves; tools/gen-emoji-data.py
|
||||
# verifies unicode-emoji against the emoji-test.txt header.
|
||||
unicode-emoji=17.0
|
||||
cldr=48
|
||||
gemoji=4.1.0
|
||||
@@ -0,0 +1,91 @@
|
||||
Copyright 2013 Google LLC
|
||||
|
||||
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||
This license is copied below, and is also available with a FAQ at:
|
||||
https://scripts.sil.org/OFL
|
||||
|
||||
|
||||
-----------------------------------------------------------
|
||||
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||
-----------------------------------------------------------
|
||||
|
||||
PREAMBLE
|
||||
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||
development of collaborative font projects, to support the font creation
|
||||
efforts of academic and linguistic communities, and to provide a free and
|
||||
open framework in which fonts may be shared and improved in partnership
|
||||
with others.
|
||||
|
||||
The OFL allows the licensed fonts to be used, studied, modified and
|
||||
redistributed freely as long as they are not sold by themselves. The
|
||||
fonts, including any derivative works, can be bundled, embedded,
|
||||
redistributed and/or sold with any software provided that any reserved
|
||||
names are not used by derivative works. The fonts and derivatives,
|
||||
however, cannot be released under any other type of license. The
|
||||
requirement for fonts to remain under this license does not apply
|
||||
to any document created using the fonts or their derivatives.
|
||||
|
||||
DEFINITIONS
|
||||
"Font Software" refers to the set of files released by the Copyright
|
||||
Holder(s) under this license and clearly marked as such. This may
|
||||
include source files, build scripts and documentation.
|
||||
|
||||
"Reserved Font Name" refers to any names specified as such after the
|
||||
copyright statement(s).
|
||||
|
||||
"Original Version" refers to the collection of Font Software components as
|
||||
distributed by the Copyright Holder(s).
|
||||
|
||||
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||
or substituting -- in part or in whole -- any of the components of the
|
||||
Original Version, by changing formats or by porting the Font Software to a
|
||||
new environment.
|
||||
|
||||
"Author" refers to any designer, engineer, programmer, technical
|
||||
writer or other person who contributed to the Font Software.
|
||||
|
||||
PERMISSION & CONDITIONS
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||
redistribute, and sell modified and unmodified copies of the Font
|
||||
Software, subject to the following conditions:
|
||||
|
||||
1) Neither the Font Software nor any of its individual components,
|
||||
in Original or Modified Versions, may be sold by itself.
|
||||
|
||||
2) Original or Modified Versions of the Font Software may be bundled,
|
||||
redistributed and/or sold with any software, provided that each copy
|
||||
contains the above copyright notice and this license. These can be
|
||||
included either as stand-alone text files, human-readable headers or
|
||||
in the appropriate machine-readable metadata fields within text or
|
||||
binary files as long as those fields can be easily viewed by the user.
|
||||
|
||||
3) No Modified Version of the Font Software may use the Reserved Font
|
||||
Name(s) unless explicit written permission is granted by the corresponding
|
||||
Copyright Holder. This restriction only applies to the primary font name as
|
||||
presented to the users.
|
||||
|
||||
4) The name(s) of the Copyright Holder(s) or the Author(s) shall not be
|
||||
used to promote, endorse or advertise any Modified Version, except to
|
||||
acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s)
|
||||
or with their explicit written permission.
|
||||
|
||||
5) The Font Software, modified or unmodified, in part or in whole,
|
||||
must be distributed entirely under this license, and must not be
|
||||
distributed under any other license. The requirement for fonts to
|
||||
remain under this license does not apply to any document created
|
||||
using the Font Software.
|
||||
|
||||
TERMINATION
|
||||
This license becomes null and void if any of the above conditions are not met.
|
||||
|
||||
DISCLAIMER
|
||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||
OTHER DEALINGS IN THE FONT SOFTWARE.
|
||||
@@ -0,0 +1,49 @@
|
||||
# Bundled emoji font
|
||||
|
||||
`NotoColorEmoji.ttf` reports Noto Color Emoji version 2.051 and covers
|
||||
Unicode Emoji 17.0. It is vendored from Debian's
|
||||
`fonts-noto-color-emoji` 2.051 package, built from the corresponding
|
||||
Google Noto Emoji release.
|
||||
|
||||
By default, GTK builds install this exact file, including Windows
|
||||
(installer and portable builds), AppImage, Flatpak, and native Meson/RPM.
|
||||
Meson packagers can set `-Dinstall-emoji-font=false` to omit the bundled
|
||||
font and its installed notices and use system emoji fonts instead. An
|
||||
explicit `ZOITECHAT_EMOJI_FONT` path still enables the private font map
|
||||
in such builds. With the bundled font, it is registered privately as
|
||||
`ZoiteChat Emoji`; an older system Noto font cannot replace it. No font
|
||||
is installed globally on Windows.
|
||||
|
||||
Chat windows and the emoji picker share this map. Fontconfig still loads
|
||||
system fonts and configuration for ordinary text, and the configured text
|
||||
font, size and style remain in effect. In particular, plain digits, `#`
|
||||
and `*` are not assigned emoji metrics.
|
||||
|
||||
Windows uses the same FreeType backend rather than GDI registration or an
|
||||
OS-version-specific picker. The dependency bundle already ships FreeType,
|
||||
Fontconfig and PangoFT2. This rendering path does not require Windows' native
|
||||
color-font support. Actual Windows 7 execution still needs testing on that OS.
|
||||
|
||||
Meson requires PangoFT2 >= 1.44 and Fontconfig >= 2.13. Normal installations
|
||||
load `share/fonts/zoitechat/NotoColorEmoji.ttf` beneath the configured data
|
||||
directory; Windows resolves it relative to the executable. AppImage sets
|
||||
`ZOITECHAT_EMOJI_FONT` to its own copy. For an uninstalled development build:
|
||||
|
||||
```sh
|
||||
ZOITECHAT_EMOJI_FONT="$PWD/data/fonts/NotoColorEmoji.ttf" build/src/fe-gtk/zoitechat
|
||||
```
|
||||
|
||||
An unexpectedly missing or unloadable bundled font logs a warning and retains
|
||||
system-font fallback. When installation is disabled deliberately, fallback is
|
||||
quiet unless an explicit `ZOITECHAT_EMOJI_FONT` override is invalid.
|
||||
CI verifies the installed copy and tests catalog/font coverage; AppImage and
|
||||
Windows also run the interactive picker regression tests. Native themes,
|
||||
DPI and different Pango/Cairo versions can still affect pixel-level output.
|
||||
|
||||
Upstream release: https://github.com/googlefonts/noto-emoji/releases/tag/v2.051
|
||||
|
||||
Vendored file SHA-256:
|
||||
`dac5c27651082d6c53dab5081f50d2022ddf6877d730fa919cf6a4fc2af22de0`
|
||||
|
||||
The font is distributed under the SIL Open Font License 1.1. See
|
||||
`OFL.txt`.
|
||||
@@ -0,0 +1,15 @@
|
||||
emoji_font_dir = join_paths(get_option('datadir'), 'fonts', 'zoitechat')
|
||||
emoji_font_doc_dir = join_paths(get_option('datadir'), 'doc', 'zoitechat', 'fonts')
|
||||
|
||||
if get_option('install-emoji-font')
|
||||
install_data(
|
||||
'NotoColorEmoji.ttf',
|
||||
install_dir: emoji_font_dir,
|
||||
)
|
||||
|
||||
install_data(
|
||||
'OFL.txt',
|
||||
'README.md',
|
||||
install_dir: emoji_font_doc_dir,
|
||||
)
|
||||
endif
|
||||
|
Before Width: | Height: | Size: 841 B After Width: | Height: | Size: 806 B |
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 2.6 KiB |
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 3.0 KiB |
|
Before Width: | Height: | Size: 422 B After Width: | Height: | Size: 874 B |
|
Before Width: | Height: | Size: 911 B After Width: | Height: | Size: 835 B |
|
Before Width: | Height: | Size: 568 B After Width: | Height: | Size: 815 B |
|
Before Width: | Height: | Size: 611 B After Width: | Height: | Size: 861 B |
|
Before Width: | Height: | Size: 660 B After Width: | Height: | Size: 662 B |
|
Before Width: | Height: | Size: 668 B After Width: | Height: | Size: 724 B |
|
Before Width: | Height: | Size: 593 B After Width: | Height: | Size: 678 B |
|
Before Width: | Height: | Size: 691 B After Width: | Height: | Size: 744 B |
|
Before Width: | Height: | Size: 678 B After Width: | Height: | Size: 691 B |
|
Before Width: | Height: | Size: 670 B After Width: | Height: | Size: 694 B |
@@ -1,49 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="256"
|
||||
height="256"
|
||||
viewBox="0 0 67.733334 67.733334"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
inkscape:version="1.4.3 (0d15f75042, 2025-12-25)"
|
||||
sodipodi:docname="zoitechat-b.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:zoom="1.0324986"
|
||||
inkscape:cx="396.61071"
|
||||
inkscape:cy="561.25984"
|
||||
inkscape:window-width="2560"
|
||||
inkscape:window-height="1368"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs1" />
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<image
|
||||
width="67.73333"
|
||||
height="67.73333"
|
||||
href="data:image/png;base64,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 truncated
|
||||
id="image1"
|
||||
x="0.19017649"
|
||||
y="-0.23783305" />
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 250 KiB |
@@ -1,49 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="256"
|
||||
height="256"
|
||||
viewBox="0 0 67.733334 67.733334"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
inkscape:version="1.4.3 (0d15f75042, 2025-12-25)"
|
||||
sodipodi:docname="zoitechat-shadowless.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:zoom="1.0324986"
|
||||
inkscape:cx="396.61071"
|
||||
inkscape:cy="561.25984"
|
||||
inkscape:window-width="2560"
|
||||
inkscape:window-height="1368"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs1" />
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<image
|
||||
width="67.73333"
|
||||
height="67.73333"
|
||||
href="data:image/png;base64,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 truncated
|
||||
id="image1"
|
||||
x="0.19017649"
|
||||
y="-0.23783305" />
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 250 KiB |
|
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 129 KiB |
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.8 KiB |
@@ -1,49 +1,46 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="256"
|
||||
height="256"
|
||||
viewBox="0 0 67.733334 67.733334"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
inkscape:version="1.4.3 (0d15f75042, 2025-12-25)"
|
||||
sodipodi:docname="zoitechat.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:zoom="1.0324986"
|
||||
inkscape:cx="396.61071"
|
||||
inkscape:cy="561.25984"
|
||||
inkscape:window-width="2560"
|
||||
inkscape:window-height="1368"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs1" />
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<image
|
||||
width="67.73333"
|
||||
height="67.73333"
|
||||
href="data:image/png;base64,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 truncated
|
||||
id="image1"
|
||||
x="0.19017649"
|
||||
y="-0.23783305" />
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="900px" height="900px" viewBox="0 0 900 900" version="1.1">
|
||||
<defs>
|
||||
<linearGradient id="linear0" gradientUnits="userSpaceOnUse" x1="14.94" y1="500" x2="893.400024" y2="500" gradientTransform="matrix(0.990818,0,0,0.899663,0,0.168452)">
|
||||
<stop offset="0" style="stop-color:rgb(0.392157%,63.137255%,98.431373%);stop-opacity:1;"/>
|
||||
<stop offset="1" style="stop-color:rgb(0%,27.843137%,73.72549%);stop-opacity:1;"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="linear1" gradientUnits="userSpaceOnUse" x1="14.94" y1="533.090027" x2="823" y2="533.090027" gradientTransform="matrix(0.990818,0,0,0.899663,0,0.168452)">
|
||||
<stop offset="0" style="stop-color:rgb(0%,27.843137%,73.72549%);stop-opacity:1;"/>
|
||||
<stop offset="1" style="stop-color:rgb(0.392157%,63.137255%,98.431373%);stop-opacity:1;"/>
|
||||
</linearGradient>
|
||||
<filter id="alpha" filterUnits="objectBoundingBox" x="0%" y="0%" width="100%" height="100%">
|
||||
<feColorMatrix type="matrix" in="SourceGraphic" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"/>
|
||||
</filter>
|
||||
<mask id="mask0">
|
||||
<g filter="url(#alpha)">
|
||||
<rect x="0" y="0" width="900" height="900" style="fill:rgb(0%,0%,0%);fill-opacity:0.301961;stroke:none;"/>
|
||||
</g>
|
||||
</mask>
|
||||
<clipPath id="clip1">
|
||||
<rect x="0" y="0" width="900" height="900"/>
|
||||
</clipPath>
|
||||
<g id="surface6" clip-path="url(#clip1)">
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 807.664062 446.90625 C 807.664062 254.1875 635.601562 97.953125 423.355469 97.953125 C 299.296875 97.953125 188.988281 151.347656 118.71875 234.1875 C 185.085938 129.585938 309.460938 59.160156 451.960938 59.160156 C 664.214844 59.160156 836.269531 215.394531 836.269531 408.113281 C 836.269531 488.183594 806.546875 561.945312 756.597656 620.828125 C 789.078125 569.628906 807.664062 510.242188 807.664062 446.90625 Z M 807.664062 446.90625 "/>
|
||||
</g>
|
||||
<mask id="mask1">
|
||||
<g filter="url(#alpha)">
|
||||
<rect x="0" y="0" width="900" height="900" style="fill:rgb(0%,0%,0%);fill-opacity:0.501961;stroke:none;"/>
|
||||
</g>
|
||||
</mask>
|
||||
<image id="image9" width="314" height="273" xlink:href="data:image/png;base64,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 truncated
|
||||
<clipPath id="clip2">
|
||||
<rect x="0" y="0" width="900" height="900"/>
|
||||
</clipPath>
|
||||
<g id="surface10" clip-path="url(#clip2)">
|
||||
<use xlink:href="#image9" transform="matrix(1.581172,0,0,1.435704,208.067513,213.172682)"/>
|
||||
</g>
|
||||
</defs>
|
||||
<g id="surface2">
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear0);" d="M 207.476562 790.304688 C 214.847656 775.902344 220.566406 761.195312 224.71875 746.339844 C 98.894531 677.074219 14.804688 551.554688 14.804688 408.183594 C 14.804688 189.945312 209.648438 13.023438 450 13.023438 C 690.351562 13.023438 885.195312 189.945312 885.195312 408.183594 C 885.195312 626.425781 690.351562 803.34375 450 803.34375 C 417.175781 803.34375 385.199219 800.023438 354.457031 793.761719 C 297.789062 857.851562 209.816406 892.078125 120.78125 886.34375 C 156.996094 862.296875 187.226562 829.847656 207.476562 790.296875 Z M 207.476562 790.304688 "/>
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear1);" d="M 207.476562 790.304688 C 214.820312 775.984375 220.496094 761.347656 224.648438 746.582031 C 98.875 677.453125 14.804688 552.058594 14.804688 408.824219 C 14.804688 266.605469 97.683594 141.980469 221.972656 72.5625 C 178.703125 133.902344 153.617188 206.828125 153.617188 285.074219 C 153.617188 502.964844 348.144531 679.59375 588.109375 679.59375 C 671.449219 679.59375 749.296875 658.273438 815.433594 621.332031 C 738.210938 730.792969 603.082031 803.34375 449.296875 803.34375 C 416.679688 803.34375 384.914062 800.058594 354.355469 793.871094 C 297.691406 857.898438 209.757812 892.078125 120.769531 886.34375 C 156.984375 862.296875 187.214844 829.847656 207.46875 790.296875 Z M 207.476562 790.304688 "/>
|
||||
<use xlink:href="#surface6" mask="url(#mask0)"/>
|
||||
<use xlink:href="#surface10" mask="url(#mask1)"/>
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 677.402344 225.28125 L 259.328125 225.28125 L 220.765625 309.644531 L 467.875 309.644531 L 220.765625 579.972656 L 638.898438 579.972656 L 677.402344 495.550781 L 430.363281 495.550781 L 677.402344 225.273438 Z M 677.402344 225.28125 "/>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 250 KiB After Width: | Height: | Size: 14 KiB |
@@ -3,6 +3,7 @@ if get_option('plugin')
|
||||
endif
|
||||
|
||||
if get_option('gtk-frontend')
|
||||
subdir('fonts')
|
||||
subdir('icons')
|
||||
subdir('misc')
|
||||
subdir('man')
|
||||
|
||||
@@ -2,6 +2,7 @@ appdir = join_paths(get_option('datadir'), 'applications')
|
||||
metainfodir = join_paths(get_option('datadir'), 'metainfo')
|
||||
mimedir = join_paths(get_option('datadir'), 'mime', 'packages')
|
||||
desktop_utils = find_program('desktop-file-validate', required: false)
|
||||
appstreamcli = find_program('appstreamcli', required: false)
|
||||
|
||||
if get_option('gtk-frontend')
|
||||
if get_option('install-appdata')
|
||||
@@ -13,16 +14,15 @@ if get_option('gtk-frontend')
|
||||
install_dir: metainfodir
|
||||
)
|
||||
|
||||
appstream_util = find_program('appstream-util', required: false)
|
||||
if appstream_util.found()
|
||||
test('Validate net.zoite.Zoitechat.appdata.xml', appstream_util,
|
||||
args: ['validate-relax', zoitechat_appdata]
|
||||
if appstreamcli.found()
|
||||
test('Validate net.zoite.Zoitechat.appdata.xml', appstreamcli,
|
||||
args: ['validate', zoitechat_appdata]
|
||||
)
|
||||
endif
|
||||
endif
|
||||
|
||||
desktop_conf = configuration_data()
|
||||
if dbus_glib_dep.found()
|
||||
if dbus_dep.found()
|
||||
desktop_conf.set('exec_command', 'zoitechat --existing %U')
|
||||
else
|
||||
desktop_conf.set('exec_command', 'zoitechat %U')
|
||||
@@ -43,10 +43,6 @@ if get_option('gtk-frontend')
|
||||
install_dir: appdir
|
||||
)
|
||||
|
||||
install_data('net.zoite.Zoitechat.mime.xml',
|
||||
install_dir: mimedir
|
||||
)
|
||||
|
||||
if desktop_utils.found()
|
||||
test('Validate net.zoite.Zoitechat.desktop', desktop_utils,
|
||||
args: [zoitechat_desktop]
|
||||
@@ -101,11 +97,18 @@ if get_option('plugin')
|
||||
conf.set('SUMMARY', metainfo[1])
|
||||
conf.set('LICENSE', metainfo[2])
|
||||
|
||||
configure_file(
|
||||
plugin_appdata = configure_file(
|
||||
input: 'net.zoite.Zoitechat.Plugin.metainfo.xml.in',
|
||||
output: 'net.zoite.Zoitechat.Plugin.@0@.metainfo.xml'.format(name),
|
||||
configuration: conf,
|
||||
install_dir: get_option('install-plugin-metainfo') ? metainfodir : '',
|
||||
)
|
||||
|
||||
if appstreamcli.found()
|
||||
test('Validate net.zoite.Zoitechat.Plugin.@0@.metainfo.xml'.format(name), appstreamcli,
|
||||
args: ['validate', plugin_appdata]
|
||||
)
|
||||
endif
|
||||
|
||||
endforeach
|
||||
endif
|
||||
@@ -4,8 +4,8 @@
|
||||
<extends>net.zoite.Zoitechat</extends>
|
||||
<name>@NAME@ Plugin</name>
|
||||
<summary>@SUMMARY@</summary>
|
||||
<url type="homepage">https://zoitechat.zoite.net/</url>
|
||||
<url type="homepage">https://zoitechat.org/</url>
|
||||
<project_license>@LICENSE@</project_license>
|
||||
<metadata_license>CC0-1.0</metadata_license>
|
||||
<update_contact>tingping_AT_fedoraproject.org</update_contact>
|
||||
<update_contact>deepend_AT_zoite.net</update_contact>
|
||||
</component>
|
||||
@@ -3,7 +3,11 @@
|
||||
<id>net.zoite.Zoitechat</id>
|
||||
<name>ZoiteChat</name>
|
||||
<launchable type="desktop-id">net.zoite.Zoitechat.desktop</launchable>
|
||||
<developer_name>ZoiteChat</developer_name>
|
||||
|
||||
<developer id="net.zoite">
|
||||
<name translate="no">ZoiteChat</name>
|
||||
</developer>
|
||||
|
||||
<metadata_license>CC0-1.0</metadata_license>
|
||||
<project_license>GPL-2.0+</project_license>
|
||||
<translation type="gettext">zoitechat</translation>
|
||||
@@ -12,12 +16,12 @@
|
||||
<p>ZoiteChat is an easy to use yet extensible IRC Client based on Hexchat. It allows you to securely join multiple networks and talk to users privately or in channels using a customizable interface. You can even transfer files.</p>
|
||||
<p>ZoiteChat supports features such as: DCC, SASL, proxies, spellcheck, alerts, logging, custom themes, and Python/Perl scripts.</p>
|
||||
</description>
|
||||
<url type="homepage">http://zoitechat.zoite.net</url>
|
||||
<url type="homepage">https://zoitechat.org</url>
|
||||
<url type="bugtracker">https://github.com/zoitechat/zoitechat</url>
|
||||
<url type="help">https://zoitechat.zoite.net/docs</url>
|
||||
<url type="help">https://docs.zoitechat.org/en/latest/</url>
|
||||
<screenshots>
|
||||
<screenshot type="default">
|
||||
<image>https://zoitechat.zoite.net/assets/ZoiteChat.png</image>
|
||||
<image>https://zoitechat.org/assets/img/zoitechat-screenshot.png</image>
|
||||
<caption>Main Chat Window</caption>
|
||||
</screenshot>
|
||||
</screenshots>
|
||||
@@ -25,6 +29,253 @@
|
||||
<id>zoitechat.desktop</id>
|
||||
</provides>
|
||||
<releases>
|
||||
<release date="2026-09-15" version="2.19.1">
|
||||
<description>
|
||||
<ul>
|
||||
<li>Fixed /msg messages showing twice on servers using IRCv3 <code>echo-message</code>.</li>
|
||||
<li>Fixed escaping a leading command slash so <code>//text</code> sends <code>/text</code> as normal chat.</li>
|
||||
<li>Fixed automatic away clearing when sending messages on servers using <code>echo-message</code>.</li>
|
||||
<li>Fixed other users' away status not updating until rejoining a channel when <code>away-notify</code> updates are missed.</li>
|
||||
<li>Fixed private messages and <code>/me</code> actions being routed to the wrong window when using WeeChat's IRC relay, while preserving channel ACTION routing.</li>
|
||||
<li>Fixed a Flatpak startup error caused by the D-Bus service still using the old HexChat app ID.</li>
|
||||
<li>Fixed optional Windows 10 theme downloads in the Windows installer.</li>
|
||||
<li>Fixed the GTK warning when switching from channel tabs to the channel tree.</li>
|
||||
<li>Fixed GTK3 theme archive root detection so themes with an <code>index.theme</code> file are preferred correctly.</li>
|
||||
<li>Fixed source-build configuration when plugin AppStream metadata installation is disabled, and corrected the minimum Meson version to 0.59.</li>
|
||||
</ul>
|
||||
</description>
|
||||
</release>
|
||||
<release date="2026-07-28" version="2.19.0">
|
||||
<description>
|
||||
<ul>
|
||||
<li>Added Python 3.8 compatibility for older Windows releases.</li>
|
||||
<li>Added on-demand SASL password prompts, including renewed prompts after reconnecting.</li>
|
||||
<li>Corrected NickServ authentication to use the decrypted password for the active network.</li>
|
||||
<li>Made system theme matching the default and polished GTK3 theme integration.</li>
|
||||
<li>Applied more settings changes immediately, reducing the need to restart ZoiteChat.</li>
|
||||
<li>Added descriptive tooltips to the color picker choices and refined default text-event colors.</li>
|
||||
<li>Stabilized channel tree font handling across palette and theme updates.</li>
|
||||
<li>Corrected the chat scrollbar increment used by its arrow buttons.</li>
|
||||
<li>Improved Windows URL launching through the native shell.</li>
|
||||
<li>Restored expected minimize behavior when clicking ZoiteChat on the Windows taskbar.</li>
|
||||
</ul>
|
||||
</description>
|
||||
</release>
|
||||
<release date="2026-06-29" version="2.18.3">
|
||||
<description>
|
||||
<ul>
|
||||
<li>Added IRCv3 support for message tags, echo-message, typing notifications, and replies.</li>
|
||||
<li>Restored the accept-invalid-cert TLS bypass behavior.</li>
|
||||
<li>Replaced legacy IPv4 APIs and added support for OpenSSL 4 APIs.</li>
|
||||
<li>Snapshot Python hooks during plugin unload for safer plugin shutdown.</li>
|
||||
<li>Fixed Windows GtkStatusIcon tray menu popup behavior.</li>
|
||||
<li>Fixed self-echoed private messages routing to the target tab.</li>
|
||||
<li>Fixed the lag ping timeout window.</li>
|
||||
</ul>
|
||||
</description>
|
||||
</release>
|
||||
<release date="2026-06-20" version="2.18.2">
|
||||
<description>
|
||||
<p>Security and connections:</p>
|
||||
<ul>
|
||||
<li>Improved TLS, certificate and hostname validation, FiSHLiM OpenSSL handling, keyring support, and DCC host lookups.</li>
|
||||
</ul>
|
||||
<p>FiSHLiM:</p>
|
||||
<ul>
|
||||
<li>Added a GTK key manager with context-menu access and clearer channel/private-message key handling.</li>
|
||||
</ul>
|
||||
<p>Interface and preferences:</p>
|
||||
<ul>
|
||||
<li>Improved keybind customization, reset support, channel-name switching, <code>/server -noproxy</code>, and stale-link ping checks.</li>
|
||||
<li>Refined GTK behavior with native file choosers, topic layout preferences, timestamp/date tooltips, text scroll controls, and aligned network meters.</li>
|
||||
<li>Added privacy and display options for hiding join/part hostmasks and controlling topic/multiline layout.</li>
|
||||
</ul>
|
||||
<p>Fixes:</p>
|
||||
<ul>
|
||||
<li>Fixed tray restore, DBus unload handling, GTK3 theme refresh/saving, topic relayout, and tab switcher compatibility.</li>
|
||||
<li>Updated project documentation.</li>
|
||||
</ul>
|
||||
</description>
|
||||
</release>
|
||||
<release date="2026-05-21" version="2.18.1">
|
||||
<description>
|
||||
<ul>
|
||||
<li>Migrated D-Bus handling to GDBus.</li>
|
||||
<li>Enabled mouse wheel channel switching by default and consumed handled tab wheel events.</li>
|
||||
<li>Switched main panes to native GTK scrollbars.</li>
|
||||
<li>Tightened userlist button and meter layout.</li>
|
||||
<li>Made the native Windows file chooser modal.</li>
|
||||
<li>Set the Windows AppUserModelID before GTK startup.</li>
|
||||
<li>Updated Windows CI to use the new GTK3 bundle zip.</li>
|
||||
<li>Updated Windows installer architecture checks to use x64-compatible detection.</li>
|
||||
<li>Bumped the Flatpak Perl runtime to 5.42.2.</li>
|
||||
<li>Fixed palette color reads to preserve base GTK state.</li>
|
||||
<li>Fixed auto-replace whole-word matching.</li>
|
||||
<li>Fixed checksum file stream cleanup.</li>
|
||||
<li>Fixed byte handling in the Python console.</li>
|
||||
<li>Guarded GTK drag-and-drop handlers against null windows.</li>
|
||||
<li>Fixed size_t and integer handling issues.</li>
|
||||
<li>Removed the Winamp plugin.</li>
|
||||
</ul>
|
||||
</description>
|
||||
</release>
|
||||
<release date="2026-04-20" version="2.18.0">
|
||||
<description>
|
||||
<p>Tabs and navigation:</p>
|
||||
<ul>
|
||||
<li>Added optional close buttons on tabs.</li>
|
||||
<li>Added Ctrl+W to close tabs and Ctrl+Shift+T to reopen recently closed tabs.</li>
|
||||
<li>Improved channel tree behavior by ignoring collapsed parent selections.</li>
|
||||
</ul>
|
||||
<p>Themes and appearance:</p>
|
||||
<ul>
|
||||
<li>Expanded theme import support with .hct support in colors.conf import.</li>
|
||||
<li>Added pevent import support from .hct theme files and improved import result messaging.</li>
|
||||
<li>Expanded palette and selection CSS styling for better theme consistency.</li>
|
||||
<li>Auto-sizes the topic bar to wrapped text for better multi-line topic handling.</li>
|
||||
</ul>
|
||||
<p>Links and text handling:</p>
|
||||
<ul>
|
||||
<li>Refined command-character parsing when pasting path-like text.</li>
|
||||
<li>Tightened topic link detection and opening rules.</li>
|
||||
<li>Added Public Suffix List validation for host links to reduce bad link matches.</li>
|
||||
</ul>
|
||||
<p>Packaging and platform integration:</p>
|
||||
<ul>
|
||||
<li>Sanitized the Linux open environment for AppImage builds and added safer fallback handling.</li>
|
||||
<li>Labeled Windows installer runtimes with exact versions.</li>
|
||||
<li>Fixed the notification icon and corrected the Flatpak screenshot asset.</li>
|
||||
<li>Improved AppStream metainfo validation.</li>
|
||||
</ul>
|
||||
</description>
|
||||
</release>
|
||||
<release date="2026-03-30" version="2.18.0~pre6">
|
||||
<description>
|
||||
<p>GTK theme and UI:</p>
|
||||
<ul>
|
||||
<li>Applied app theme CSS to the menubar consistently across the app.</li>
|
||||
<li>Restored horizontal separator lines in menus.</li>
|
||||
<li>Fixed duplicate dialog buttons persisting in the UI.</li>
|
||||
<li>Fixed GTK auto-replace cursor snapback.</li>
|
||||
<li>Restored hiding of formatting control bytes so only formatted output is shown.</li>
|
||||
<li>Fixed xtext link hit-testing coordinates.</li>
|
||||
<li>Fixed short-palette fallback clobbering tab colors.</li>
|
||||
<li>Added a None option for resetting the GTK3 theme back to system/default behavior.</li>
|
||||
<li>Wrapped the topic bar in a scroller with bounded height.</li>
|
||||
<li>Fixed fallback GTK menu highlight states.</li>
|
||||
<li>Applied configured font preferences to the topic bar, channel tree, user list, and input box.</li>
|
||||
<li>Removed unused UI icons.</li>
|
||||
<li>Added close buttons to tabs.</li>
|
||||
</ul>
|
||||
<p>Preferences and search:</p>
|
||||
<ul>
|
||||
<li>Lazy-loads Preferences pages on first open for faster dialog startup.</li>
|
||||
<li>Added channel-only mode to Ctrl+F search.</li>
|
||||
</ul>
|
||||
<p>Security and certificates:</p>
|
||||
<ul>
|
||||
<li>Added one-click client SSL certificate tools, including generation with P-256 certificates.</li>
|
||||
<li>Added client SSL certificate import support in the network editor.</li>
|
||||
</ul>
|
||||
<p>Windows and packaging:</p>
|
||||
<ul>
|
||||
<li>Improved Windows installer VC++ redistributable handling by failing loudly when missing and using the official Microsoft download endpoint.</li>
|
||||
<li>Fixed Windows locale path resolution in both GTK and text frontends.</li>
|
||||
</ul>
|
||||
<p>Other changes:</p>
|
||||
<ul>
|
||||
<li>Added 99-color support.</li>
|
||||
<li>Disabled disk info in sysinfo.</li>
|
||||
</ul>
|
||||
</description>
|
||||
</release>
|
||||
<release date="2026-03-22" version="2.18.0~pre5">
|
||||
<description>
|
||||
<p>Preferences and config saving:</p>
|
||||
<ul>
|
||||
<li>Overhauled preferences/config saving: fully staged and transactional, debounced with flush on close, write failures now surfaced.</li>
|
||||
</ul>
|
||||
<p>GTK theme and UI:</p>
|
||||
<ul>
|
||||
<li>Overhauled GTK theme handling: live preview, correct colour reset persistence, proper <code>file://</code> import paths, consistent menubar CSS.</li>
|
||||
<li>Fixed GTK entry scroll artifact in the input box.</li>
|
||||
<li>Split topic/mode rows in channel bar, tighten spacing, persist userlist column widths.</li>
|
||||
<li>Preserve saved right-pane size on first layout.</li>
|
||||
<li>Fixed sounds prefs section.</li>
|
||||
<li>Fixed chanview tree layout and header alignment; tighten topic URL hit-testing.</li>
|
||||
</ul>
|
||||
<p>Tray:</p>
|
||||
<ul>
|
||||
<li>Hardened tray menu lifetime; fixed stale pointer crash on menu destruction.</li>
|
||||
<li>Fixed AppIndicator tray init for Wayland/source builds; skip redundant X11 tray probe for AppIndicator builds.</li>
|
||||
</ul>
|
||||
<p>Build and packaging:</p>
|
||||
<ul>
|
||||
<li>Dropped <code>realpath()</code> in favour of GLib-only absolute path build.</li>
|
||||
<li>Made About dialog links explicit; added GPL licence URL.</li>
|
||||
<li>Added licence headers to new source files.</li>
|
||||
<li>Windows installer: fixed VC++ redist URL, added non-plugin download fallback, switched to registry-based runtime detection.</li>
|
||||
<li>Made <code>libayatana-appindicator</code> a required dep in PKGBUILD.</li>
|
||||
<li>Cleaned up Meson libperl detection.</li>
|
||||
</ul>
|
||||
</description>
|
||||
</release>
|
||||
<release date="2026-03-14" version="2.18.0~pre4">
|
||||
<description>
|
||||
<p>UI fixes, topic bar improvements, and selection styling updates:</p>
|
||||
<ul>
|
||||
<li>Fixed a regression where <code>Ctrl+A</code> could incorrectly mark you away instead of selecting all text.</li>
|
||||
<li>Fixed a crash when toggling the GUI with <code>F9</code> or the menu toggle action.</li>
|
||||
<li>Fixed sidebar collapse behavior on fresh installs.</li>
|
||||
<li>Added multiline topic bar support with clickable URLs.</li>
|
||||
<li>Improved GTK selection styling so text selection is shown visually in the topic bar and chat input box.</li>
|
||||
</ul>
|
||||
</description>
|
||||
</release>
|
||||
<release date="2026-03-13" version="2.18.0~pre3">
|
||||
<description>
|
||||
<p>GTK3 theming, UI, and platform improvements:</p>
|
||||
<ul>
|
||||
<li>Added a major GTK3 theming overhaul with improved theme importing, inheritance, rollback safety, and caching.</li>
|
||||
<li>Merged theme settings into Appearance and added a new Advanced section.</li>
|
||||
<li>Added a full color editor and improved widget, chat text, userlist, and tab color handling.</li>
|
||||
<li>Added <code>colors.conf</code> import support and improved compatibility with older themes.</li>
|
||||
<li>Improved chat background image handling and switched to a native file picker.</li>
|
||||
<li>Bundled more built-in icons, including OK/Cancel, and improved emoji fallback support.</li>
|
||||
<li>Embedded the app SVG icon and improved headerbar icon handling.</li>
|
||||
<li>Fixed KDE Wayland alert flashing.</li>
|
||||
<li>Fixed tray hide/restore labels so tray state stays in sync with the real window state.</li>
|
||||
<li>Fixed several GTK3 styling issues, warning spam, and imported CSS cleanup problems.</li>
|
||||
<li>Removed menubar icons and simplified Away menu behavior.</li>
|
||||
<li>Improved Flatpak behavior on KDE and enabled Python/Perl plugin support.</li>
|
||||
<li>Manual addons now persist properly by being copied into the user addon directory.</li>
|
||||
<li>Updated the bundled server list and added a checker script for server list maintenance.</li>
|
||||
</ul>
|
||||
</description>
|
||||
</release>
|
||||
<release date="2026-02-25" version="2.18.0~pre2">
|
||||
<description>
|
||||
<p>Compatibility and UI improvements:</p>
|
||||
<ul>
|
||||
<li>Added HexChat plugin compatibility improvements.</li>
|
||||
<li>Fixed the user info right-click menu so it updates properly.</li>
|
||||
<li>Added support for emoji characters in alert highlights.</li>
|
||||
<li>Removed remaining unused GTK2 code paths.</li>
|
||||
</ul>
|
||||
</description>
|
||||
</release>
|
||||
<release date="2026-02-16" version="2.18.0~pre1">
|
||||
<description>
|
||||
<p>Packaging and GTK3 improvements:</p>
|
||||
<ul>
|
||||
<li>Switched Debian package builds to GTK 3.</li>
|
||||
<li>Added split-package install manifests for Debian outputs.</li>
|
||||
<li>Fixed unassigned Debian package files (man page and MIME XML).</li>
|
||||
<li>Updated Debian CI artifact upload handling for GitHub Actions v4.</li>
|
||||
<li>Improved GTK3 channel/user list font consistency when applying theme updates.</li>
|
||||
</ul>
|
||||
</description>
|
||||
</release>
|
||||
<release date="2026-02-03" version="2.17.4">
|
||||
<description>
|
||||
<p>Fixes and minor features:</p>
|
||||
@@ -211,5 +462,5 @@
|
||||
<content_rating type="oars-1.1">
|
||||
<content_attribute id="social-chat">intense</content_attribute>
|
||||
</content_rating>
|
||||
<update_contact>tingping_at_fedoraproject.org</update_contact>
|
||||
<update_contact>deepend_at_zoite.net</update_contact>
|
||||
</component>
|
||||
@@ -9,9 +9,9 @@ Terminal=false
|
||||
Type=Application
|
||||
Categories=GTK;Network;IRCClient;
|
||||
StartupNotify=true
|
||||
StartupWMClass=Zoitechat
|
||||
StartupWMClass=net.zoite.Zoitechat
|
||||
X-GNOME-UsesNotifications=true
|
||||
MimeType=x-scheme-handler/irc;x-scheme-handler/ircs;application/x-zoitechat-theme;application/x-hexchat-theme;
|
||||
MimeType=x-scheme-handler/irc;x-scheme-handler/ircs;
|
||||
Actions=SafeMode;
|
||||
|
||||
[Desktop Action SafeMode]
|
||||
|
||||
@@ -1,11 +1,3 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
|
||||
<mime-type type="application/x-zoitechat-theme">
|
||||
<comment>ZoiteChat Theme</comment>
|
||||
<glob pattern="*.zct"/>
|
||||
</mime-type>
|
||||
<mime-type type="application/x-hexchat-theme">
|
||||
<comment>HexChat Theme</comment>
|
||||
<glob pattern="*.hct"/>
|
||||
</mime-type>
|
||||
</mime-info>
|
||||
@@ -2,6 +2,7 @@
|
||||
<gresources>
|
||||
<gresource prefix="/icons">
|
||||
<file alias="zoitechat.png" preprocess="to-pixdata">icons/zoitechat.png</file>
|
||||
<file alias="zoitechat.svg">icons/zoitechat.svg</file>
|
||||
<file alias="book.png" preprocess="to-pixdata">icons/book.png</file>
|
||||
|
||||
<file alias="ulist_voice.png" preprocess="to-pixdata">icons/ulist_voice.png</file>
|
||||
@@ -20,5 +21,7 @@
|
||||
<file alias="tree_dialog.png" preprocess="to-pixdata">icons/tree_dialog.png</file>
|
||||
<file alias="tree_server.png" preprocess="to-pixdata">icons/tree_server.png</file>
|
||||
<file alias="tree_util.png" preprocess="to-pixdata">icons/tree_util.png</file>
|
||||
|
||||
|
||||
</gresource>
|
||||
</gresources>
|
||||
@@ -1,491 +0,0 @@
|
||||
zoitechat (2.17.0-0) stable; urgency=medium
|
||||
|
||||
* Initial ZoiteChat packaging (forked from HexChat's Debian packaging).
|
||||
* Rename packages/binaries to zoitechat.
|
||||
* Move Python plugin package to Suggests (known to be unstable in Flatpak builds).
|
||||
|
||||
-- ZoiteChat Maintainers <zoitechat@users.noreply.github.com> Wed, 07 Jan 2026 00:00:00 +0000
|
||||
|
||||
hexchat (2.16.2-1) unstable; urgency=medium
|
||||
|
||||
* Update watch file for new github tarball location
|
||||
* New upstream version 2.16.2
|
||||
* Update copyright file
|
||||
* Update copyright years also for Debian packaging
|
||||
* Drop patch 0001-Be-even-more-picky-about-invalid-URLs.patch: upstream
|
||||
* Add three patches from <pabs>:
|
||||
- Add-channel-context-menu-item-to-close-the-channel,
|
||||
- Automatically-reconnect-when-there-is-a-TLS-error,
|
||||
- Do-not-insert-an-extra-space-on-all-lines-when-loading-scrollback-with-colours
|
||||
|
||||
-- Gianfranco Costamagna <locutusofborg@debian.org> Sat, 09 Mar 2024 11:51:16 +0100
|
||||
|
||||
hexchat (2.16.1-2) unstable; urgency=medium
|
||||
|
||||
[ Gianfranco Costamagna ]
|
||||
* Team upload
|
||||
|
||||
[ Debian Janitor ]
|
||||
* Drop versioned constraint on python3-dev.
|
||||
|
||||
[ Sudip Mukherjee ]
|
||||
* Fix hexchat crash for specific links. (LP: #2029314)
|
||||
+ This is an upstream cherry-pick
|
||||
|
||||
-- Gianfranco Costamagna <locutusofborg@debian.org> Wed, 06 Mar 2024 07:30:56 +0100
|
||||
|
||||
hexchat (2.16.1-1) unstable; urgency=medium
|
||||
|
||||
* New upstream version 2.16.1.
|
||||
* Drop all patches, applied upstream.
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Fri, 22 Apr 2022 21:52:27 +0200
|
||||
|
||||
hexchat (2.16.0-4) unstable; urgency=medium
|
||||
|
||||
* d/copyright: bump copyright year
|
||||
* Add some patches from upstream, while waiting for the new release:
|
||||
+ Fix build with OpenSSL 3.
|
||||
+ Improve the fishlim tests.
|
||||
+ Fix the URL opening to not double-encode already encoded URLs.
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Mon, 17 Jan 2022 13:26:58 +0100
|
||||
|
||||
hexchat (2.16.0-3) unstable; urgency=medium
|
||||
|
||||
* Increase the tests timeout even more.
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Sun, 31 Oct 2021 17:45:43 +0100
|
||||
|
||||
hexchat (2.16.0-2) unstable; urgency=medium
|
||||
|
||||
* Add patch to increase the tests timeout.
|
||||
* Update our copy of the upstream changelog.
|
||||
* Recommends:hexchat-lua from hexchat. Closes: #996172
|
||||
Thanks to Jesse Rhodes <jesse@sney.ca> for the patch!
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Fri, 15 Oct 2021 14:20:31 +0200
|
||||
|
||||
hexchat (2.16.0-1) unstable; urgency=medium
|
||||
|
||||
[ Mattia Rizzolo ]
|
||||
* New upstream version 2.16.0.
|
||||
+ Drop all patches applied upstream.
|
||||
+ Refresh the patches tweaking the default channels/networks.
|
||||
* Refresh the upstream signing key.
|
||||
* Update copyright.
|
||||
* Drop our patch renaming the Python plugin into Python3.
|
||||
There doesn't seem to be any transition needed.
|
||||
* d/control:
|
||||
+ Drop Build-Depends on libnotify-dev and libproxy-dev,
|
||||
not used anymore starting with v2.16.
|
||||
+ Have hexchat-python3 Depend on python3-cffi-backend;
|
||||
seems like I missed this dependency since v2.14.3-4.
|
||||
+ Bump Standards-Version to 4.6.0, no changes needed.
|
||||
|
||||
[ Debian Janitor ]
|
||||
* Remove constraints unnecessary since buster:
|
||||
* Build-Depends: Drop versioned constraint on meson.
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Mon, 04 Oct 2021 17:12:52 +0200
|
||||
|
||||
hexchat (2.14.3-6) unstable; urgency=medium
|
||||
|
||||
* Add Recommends:ca-certificates.
|
||||
* Add patches from upstream to add Libera.Chat to the network list.
|
||||
* Adapt default servers patches for the upstream changes.
|
||||
* Ubuntu default server: LP: #1933681
|
||||
+ Change from Freenode to Libera.Chat.
|
||||
+ Pre-select the "join channel" button, like we do in Debian.
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Wed, 26 May 2021 14:55:10 +0200
|
||||
|
||||
hexchat (2.14.3-5) unstable; urgency=medium
|
||||
|
||||
* Bump copyright for 2021.
|
||||
* Apply patch from upstream to fix font height calculation with Pango>=1.44.
|
||||
LP: #1920974
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Sat, 02 Jan 2021 16:31:39 +0100
|
||||
|
||||
hexchat (2.14.3-4) unstable; urgency=medium
|
||||
|
||||
[ Debian Janitor ]
|
||||
* Set upstream metadata fields: Bug-Submit.
|
||||
|
||||
[ Mattia Rizzolo ]
|
||||
* Bump Standards-Version to 4.5.1, no changes needed.
|
||||
* Bump debhelper compat version to 13.
|
||||
+ Drop dh_missing override, now that --fail-missing is the default.
|
||||
* Add a patch series from upstream to refactor the whole Python plugin,
|
||||
using CFFI. This fixes support for Python 3.9. Closes: #975393
|
||||
+ Replace my naive patch to fix the build with Python 3.8, using instead
|
||||
the fix that comes from upstream.
|
||||
+ Install the new files produced by cffi.
|
||||
+ Add new Build-Depends python3-cffi.
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Wed, 16 Dec 2020 22:03:57 +0100
|
||||
|
||||
hexchat (2.14.3-3) unstable; urgency=medium
|
||||
|
||||
* Add patch to use the new -embed variant of python3.pc.
|
||||
Fix linking with Python 3.8. LP: #1866081
|
||||
* Swap the Recommends:hwdata with Recommends:pci.ids. Closes: #953300
|
||||
* Bump Standards-Version to 4.5.0, no changes needed.
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Wed, 11 Mar 2020 17:08:25 +0100
|
||||
|
||||
hexchat (2.14.3-2) unstable; urgency=medium
|
||||
|
||||
[ Gianfranco Costamagna ]
|
||||
* Refresh the Ubuntu servlist patch.
|
||||
|
||||
[ Mattia Rizzolo ]
|
||||
* Import patch from upstream (from James Clarke) to properly prioritize
|
||||
MODE commands, that were delaying PINGs in some cases.
|
||||
|
||||
[ Debian Janitor ]
|
||||
* Set upstream metadata fields: Bug-Database, Repository,
|
||||
Repository-Browse.
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Thu, 02 Jan 2020 09:46:24 +0100
|
||||
|
||||
hexchat (2.14.3-1) unstable; urgency=medium
|
||||
|
||||
* New upstream version 2.14.3.
|
||||
+ Drop patches applied upstream.
|
||||
* d/control:
|
||||
+ Bump build-dependency on meson to >= 0.40.
|
||||
+ Bump Standards-Version to 4.4.1, no changes needed.
|
||||
* Update the boundled upstream docs.
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Tue, 31 Dec 2019 15:24:45 +0100
|
||||
|
||||
hexchat (2.14.2-5) unstable; urgency=medium
|
||||
|
||||
* Stop building the Python2 plugin. Closes: #936697
|
||||
Simplify the patch used to build py2 and py3; we need to keep it because
|
||||
we used to rename the 'python' plugin to 'python3'. We should check if
|
||||
some kind of transition should be done to go back to the upstream
|
||||
defaults.
|
||||
* d/control:
|
||||
+ Drop a bunch of old Breaks/Replaces that shouldn't be needed anymore.
|
||||
+ Bump Standards-Version to 4.4.0, no changes needed.
|
||||
+ Bump debhelper compat level to 12, no changes needed.
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Sat, 31 Aug 2019 11:57:51 +0200
|
||||
|
||||
hexchat (2.14.2-4) unstable; urgency=medium
|
||||
|
||||
* Add a patch to fix a probable crash while unloading the Python plugin
|
||||
when using Python 3.7. LP: #1830246; Closes: #921208
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Sat, 25 May 2019 11:48:26 +0200
|
||||
|
||||
hexchat (2.14.2-3) unstable; urgency=medium
|
||||
|
||||
[ Ondřej Nový ]
|
||||
* d/copyright: Change Format URL to correct one.
|
||||
|
||||
[ Mattia Rizzolo ]
|
||||
* Move the patches tweaking the default servers out of d/patches, and inject
|
||||
them through d/rules. The ctte decided that vendored series files are not
|
||||
allowed in the Debian archive, see #904302. Closes: #915350
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Mon, 03 Dec 2018 14:17:35 +0100
|
||||
|
||||
hexchat (2.14.2-2) unstable; urgency=medium
|
||||
|
||||
* Add patch to fix FTBFS on !linux.
|
||||
* d/control: Use the new debhelper-compat(=11) build-dep and drop d/compat.
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Sun, 23 Sep 2018 20:38:39 +0200
|
||||
|
||||
hexchat (2.14.2-1) unstable; urgency=medium
|
||||
|
||||
* New upstream version 2.14.2.
|
||||
* d/patches:
|
||||
+ Drop patches applied upstream.
|
||||
+ Refresh remaining patches.
|
||||
* d/control: Bump Standards-Version to 4.2.1, no changes needed.
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Sat, 01 Sep 2018 22:28:20 +0200
|
||||
|
||||
hexchat (2.14.1-2) unstable; urgency=medium
|
||||
|
||||
* Add some patches from upstream:
|
||||
+ upstream/0003-Remove-shift-click-to-close-tab-binding.patch
|
||||
- LP: #1756402
|
||||
+ upstream/0004-build-Add-metainfo-files-for-addons.patch
|
||||
+ upstream/0005-build-Fix-id-in-plugin-metainfo-files.patch
|
||||
+ upstream/0006-build-Correctly-set-plugin-licenses.patch
|
||||
+ upstream/0007-build-Re-add-support-for-the-legacy-perl-api.patch
|
||||
+ upstream/0008-Deiconify-window-on-tray-click.-Closes-2136.patch
|
||||
* Fixup our py2+py3 patch after the above patches have been applied.
|
||||
* Install the new metainfo files representing the various plugins.
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Tue, 20 Mar 2018 16:10:27 +0100
|
||||
|
||||
hexchat (2.14.1-1) unstable; urgency=medium
|
||||
|
||||
* New upstream version 2.14.1.
|
||||
* Drop all patches applied upstream.
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Wed, 14 Mar 2018 03:35:41 +0100
|
||||
|
||||
hexchat (2.14.0-1) unstable; urgency=medium
|
||||
|
||||
* New upstream version 2.14.0. Closes: #892085
|
||||
* Refresh patches:
|
||||
+ drop 4c178782a779f013fafab476506f7d4dae372b8a.patch, applied upstream.
|
||||
+ Rewrite the local patch used to build for both python2 and python3 after
|
||||
the change of build system upstream.
|
||||
+ Add all the commits from upstream after the release:
|
||||
- 0003-build-Remove-pie-from-global-ldflags.patch
|
||||
- 0004-Fix-fscanf-usage-without-size-limit.patch
|
||||
- 0005-fix-typo-in-comment.patch
|
||||
- 0006-Revert-xtext-Always-use-Pango-to-get-correct-glyph-w.patch
|
||||
* d/control:
|
||||
+ Update build dependencies for the new upstream:
|
||||
- New build-deps: gettext, iso-codes, liblua5.3-dev, meson (>= 0.38).
|
||||
- Drop build-deps: dh-lua, intltool, libtool.
|
||||
- Drop version restriction from libgtk2.0-dev (>= 2.10.0).
|
||||
+ Set Rules-Requires-Root:no.
|
||||
* d/changelog.txt: Update from upstream.
|
||||
* d/hexchat.install: Slightly update the paths.
|
||||
* d/rules:
|
||||
+ Drop override_dh_install not needed anymore with meson.
|
||||
+ Explicitly build with lua 5.3. The new build system defaults on luajit
|
||||
only now.
|
||||
* d/copyright: Update.
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Wed, 14 Mar 2018 02:36:37 +0100
|
||||
|
||||
hexchat (2.12.4-6) unstable; urgency=medium
|
||||
|
||||
* d/control:
|
||||
+ Move packaging to salsa.debian.org.
|
||||
+ Replace recomendency on gvfs-bin to libglib2.0-bin. Closes: #877746
|
||||
+ Bump Standards-Version to 4.1.3, no changes needed.
|
||||
* d/copyright: Bump copyright years for debian/*.
|
||||
* d/rules: Replace dh_install --fail-missing by dh_missing.
|
||||
* d/watch: Use HTTPS.
|
||||
* Bump debhelper compat level to 11.
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Sat, 24 Feb 2018 18:26:41 +0100
|
||||
|
||||
hexchat (2.12.4-5) unstable; urgency=medium
|
||||
|
||||
* Add a short description to the previous changelog entry on how to manually
|
||||
preserve the scrollback that would otherwise get lost.
|
||||
* Remove the patch also for Ubuntu (fixing FTBFS there).
|
||||
* d/control:
|
||||
+ Add a bunch of Multi-Arch:same notation, suggested by the M-A hinter.
|
||||
+ Remove the transitional package hexchat-python.
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Sat, 15 Jul 2017 18:34:27 +0200
|
||||
|
||||
hexchat (2.12.4-4) unstable; urgency=medium
|
||||
|
||||
* Stop reverting upstream commit 15600f405f2d5bda6ccf0dd73957395716e0d4d3.
|
||||
This means users will lose their scrollback right after updating, but
|
||||
that's what upstream did and we have no real reasons to undefinitely
|
||||
diverge from them just to wait for a nicer fix.
|
||||
Closes: #852275; CVE-2016-2087
|
||||
For users who care about their scrollback, it's enough to manually rename
|
||||
the directories in ~/.config/hexchat/scrollback to all-lowercase characters
|
||||
before restarting hexchat after the update.
|
||||
* d/control: Bump Standards-Version to 4.0.0, no changes needed
|
||||
* d/copyright: bump my copyright year for debian/ to cover 2017
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Fri, 14 Jul 2017 16:12:32 +0200
|
||||
|
||||
hexchat (2.12.4-3) unstable; urgency=medium
|
||||
|
||||
* Demote hexchat-otr from Recommends to Suggests.
|
||||
It reportely causes noise and problems for unexperienced users, and it's
|
||||
a mostly unmaintained plugin, so don't install it by default.
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Tue, 30 May 2017 21:50:09 +0200
|
||||
|
||||
hexchat (2.12.4-2) unstable; urgency=medium
|
||||
|
||||
* Also apply patch 4c178782a779f013fafab476506f7d4dae372b8a.patch on ubuntu.
|
||||
* d/p/0001-Debian-server-defaults.patch: Add missing braces around the `if`.
|
||||
Thanks to Lauri Alanko <la@iki.fi> for the patch. Closes: #779892
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Thu, 26 Jan 2017 09:54:41 +0100
|
||||
|
||||
hexchat (2.12.4-1) unstable; urgency=medium
|
||||
|
||||
* New upstream version 2.12.4.
|
||||
* d/copyright: update (removal of the doat plugin).
|
||||
* d/watch: improve:
|
||||
+ Bump version to 4.
|
||||
+ Use substitution strings @ANY_VERSION@ and @ARCHIVE_EXT@.
|
||||
+ Ignore version 2.12.4-repack by mangling it into 2.12.4.
|
||||
* d/control: mark hexchat-dev and hexchat-lua as Multi-Arch:same.
|
||||
* d/patches/:
|
||||
+ openssl/*: drop, applied upstream.
|
||||
+ clean.patch: drop, applied upstream.
|
||||
+ 4c178782a779f013fafab476506f7d4dae372b8a.patch: include from upstream to
|
||||
work around a gdk-pixbuf bug which would prevent the hexchat icon from
|
||||
being displayed in panels/systrays. Closes: #848615
|
||||
* d/rules: add a 'udoc' target to update the bundled copy of upstream doc.
|
||||
* Update upstream documentation.
|
||||
* d/hexchat-plugins.install: upstream converted the 'doat' plugin into an
|
||||
internal command, so stop trying to install the plugin.
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Mon, 26 Dec 2016 01:16:19 +0100
|
||||
|
||||
hexchat (2.12.3-4) unstable; urgency=medium
|
||||
|
||||
* Re-enable Lua support everywhere now that #845929 is fixed.
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Mon, 19 Dec 2016 12:47:31 +0100
|
||||
|
||||
hexchat (2.12.3-3) unstable; urgency=medium
|
||||
|
||||
* Actually disable Lua support when building.
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Mon, 05 Dec 2016 16:03:26 +0100
|
||||
|
||||
hexchat (2.12.3-2) unstable; urgency=medium
|
||||
|
||||
* Temporary restrict the build of hexchat-lua to the architectures where lua
|
||||
is usable right now (see #845929).
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Mon, 05 Dec 2016 14:02:40 +0100
|
||||
|
||||
hexchat (2.12.3-1) unstable; urgency=medium
|
||||
|
||||
[ Jesse Rhodes ]
|
||||
* Add hexchat-dev package for .pc and .h files.
|
||||
* Include dbus service file in hexchat-common.
|
||||
|
||||
[ Mattia Rizzolo ]
|
||||
* Take over maintenance from Jasse Rhodes.
|
||||
Thank you for all your work these years! Closes: #844574
|
||||
* debian/control:
|
||||
+ wrap-and-sort -ast.
|
||||
+ Bump Standards-Version to 3.9.8, no changes needed.
|
||||
+ Add proper Breaks/Replaces for the hexchat-dev addition-
|
||||
+ Have hexchat-plugins recommend hwdata for the sysinfo plugin.
|
||||
Closes: #845940
|
||||
+ Have hexchat recommend the hexchat-otr plugin.
|
||||
Thanks to Petter Reinholdtsen <pere@hungry.com> for the suggestion
|
||||
+ Bump the Breaks/Replaces of hexchat-plugins against hexchat;
|
||||
hexchat-plugin.pc has been moved from hexchat to hexchat-plugins
|
||||
in 2.12.0-1. LP: #1586239
|
||||
+ Set appropriate Breaks/Replaces to cope with the Ubuntu delta and
|
||||
make the package syncable.
|
||||
+ Mark hexchat-common as Multi-Arch:foreign (from the m-a hinter).
|
||||
* debian/rules:
|
||||
+ Remove huge override_dh_auto_clean: if anything of that is needed,
|
||||
it should be done on the upstream side.
|
||||
+ Remove *.la files before running dh_install.
|
||||
+ Use dh_install --fail-missing.
|
||||
* Package the Lua plugin. Closes: #834491
|
||||
* Update upstream changelog for 2.13.2.
|
||||
* Use dh_installchangelogs to install the upstream changelog, instead of
|
||||
manually compressing in rules and the install with d/*.docs.
|
||||
* Let the upstream build system put the manpage in place, instead of copying
|
||||
it of our own.
|
||||
* Add patch to properly clean the upstream sources and make possible to build
|
||||
the package twice in a row.
|
||||
* Bump debhelper compat level to 10.
|
||||
+ --with autoreconf is now default.
|
||||
* debian/copyright:
|
||||
+ Make it DEP-5 compliant.
|
||||
+ Update.
|
||||
* Drop nearly all lintian overrides; they are either fixed or unused.
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Thu, 01 Dec 2016 18:30:03 +0100
|
||||
|
||||
hexchat (2.12.3-0.1) unstable; urgency=medium
|
||||
|
||||
* Non-maintainer upload, with maintainer ACK.
|
||||
|
||||
[ Jesse Rhodes ]
|
||||
* Fixed vcs-git url.
|
||||
|
||||
[ Mattia Rizzolo ]
|
||||
* Imported Upstream version 2.12.3. Closes: #836809
|
||||
* Refresh patches
|
||||
* d/rules: disable LUA bindings, as they would require a new binary package.
|
||||
* Add several patches from upstream to add support to OpenSSL 1.1.0.
|
||||
Closes: #828339
|
||||
* Revert upstream commit 15600f405f2d5bda6ccf0dd73957395716e0d4d3, which
|
||||
would cause users to lose their scrollback.
|
||||
|
||||
-- Mattia Rizzolo <mattia@debian.org> Sun, 27 Nov 2016 13:41:25 +0100
|
||||
|
||||
hexchat (2.12.0-2) unstable; urgency=medium
|
||||
|
||||
* Removed patch correcting for missing translations,
|
||||
as translations are no longer missing
|
||||
* Removed patch correcting spelling error that would break
|
||||
some scripts and themes
|
||||
* Updated ubuntu server/channel defaults
|
||||
|
||||
-- Jesse Rhodes <drubo@drubo.net> Wed, 30 Mar 2016 11:44:04 -0600
|
||||
|
||||
hexchat (2.12.0-1) unstable; urgency=medium
|
||||
|
||||
* New upstream release
|
||||
* Iceweasel no longer called Firefox in url dialog
|
||||
* Building both python2 and python3 plugins
|
||||
* Including hexchat-plugin.pc (Closes: 801767)
|
||||
|
||||
-- Jesse Rhodes <drubo@drubo.net> Fri, 25 Mar 2016 10:54:57 -0600
|
||||
|
||||
hexchat (2.10.2-1) unstable; urgency=medium
|
||||
|
||||
* New upstream release
|
||||
* Includes upstream fixes for POODLE vulnerability
|
||||
(CVE-2014-3566)
|
||||
* Split plugins into modular packages rather than having all
|
||||
binaries in the main hexchat package
|
||||
|
||||
-- Jesse Rhodes <drubo@drubo.net> Fri, 28 Nov 2014 18:35:39 -0700
|
||||
|
||||
hexchat (2.10.1-2) unstable; urgency=medium
|
||||
|
||||
* Fix ubuntu_defaults.patch (LP: #1390851)
|
||||
* Disable SSLv3
|
||||
|
||||
-- Jesse Rhodes <drubo@drubo.net> Sun, 16 Nov 2014 11:47:12 -0700
|
||||
|
||||
hexchat (2.10.1-1) unstable; urgency=medium
|
||||
|
||||
* New upstream release
|
||||
* No longer build-depend on libsexy-dev
|
||||
* URL handler dialog now labeled Iceweasel rather than Firefox
|
||||
|
||||
-- Jesse Rhodes <drubo@drubo.net> Mon, 18 Aug 2014 21:18:55 -0600
|
||||
|
||||
hexchat (2.10.0-1) unstable; urgency=medium
|
||||
|
||||
* New upstream release
|
||||
* Removed patches for issues fixed by upstream
|
||||
* Added default servers and recommended channels for debian
|
||||
and ubuntu (LP: #1294415)
|
||||
* Upstream commit fa955a0f fixes xdcc segfault (Closes: #745764)
|
||||
|
||||
-- Jesse Rhodes <drubo@drubo.net> Sun, 01 Jun 2014 16:45:22 -0600
|
||||
|
||||
hexchat (2.9.6.1-2) unstable; urgency=low
|
||||
|
||||
* Now using dh-autoreconf instead of autotools-dev (Closes: #739630)
|
||||
* Added gvfs-bin as Recommends so default url handlers work
|
||||
(Closes: #740006)
|
||||
* Added unifont as Suggests for unicode symbol support
|
||||
* Included png,svg icons in package
|
||||
|
||||
-- Jesse Rhodes <drubo@drubo.net> Tue, 25 Feb 2014 16:45:42 -0700
|
||||
|
||||
hexchat (2.9.6.1-1) unstable; urgency=low
|
||||
|
||||
* Initial release (Closes: #702075)
|
||||
|
||||
-- Jesse Rhodes <drubo@drubo.net> Mon, 03 Feb 2014 19:09:17 -0700
|
||||
@@ -1,126 +0,0 @@
|
||||
Source: zoitechat
|
||||
Section: net
|
||||
Priority: optional
|
||||
Maintainer: ZoiteChat Maintainers <zoitechat@users.noreply.github.com>
|
||||
Build-Depends:
|
||||
debhelper-compat (= 13),
|
||||
gettext,
|
||||
iso-codes,
|
||||
libcanberra-dev,
|
||||
libdbus-glib-1-dev,
|
||||
libglib2.0-dev,
|
||||
libgtk2.0-dev,
|
||||
liblua5.3-dev,
|
||||
libpci-dev,
|
||||
libperl-dev,
|
||||
libssl-dev,
|
||||
meson,
|
||||
python3-cffi,
|
||||
python3-dev
|
||||
Standards-Version: 4.6.0
|
||||
Rules-Requires-Root: no
|
||||
Vcs-Git: https://github.com/zoitechat/zoitechat.git
|
||||
Vcs-Browser: https://github.com/zoitechat/zoitechat
|
||||
Homepage: https://zoitechat.zoite.net
|
||||
|
||||
Package: zoitechat
|
||||
Architecture: any
|
||||
Depends:
|
||||
zoitechat-common (= ${binary:Version}),
|
||||
${misc:Depends},
|
||||
${shlibs:Depends}
|
||||
Recommends:
|
||||
ca-certificates,
|
||||
zoitechat-lua,
|
||||
zoitechat-perl,
|
||||
zoitechat-plugins,
|
||||
libglib2.0-bin
|
||||
Suggests:
|
||||
zoitechat-python3,
|
||||
zoitechat-otr,
|
||||
unifont
|
||||
Description: IRC client for GNOME (fork of HexChat 2.17.0 base)
|
||||
ZoiteChat is a graphical IRC client with a GTK+ GUI. Features include Python,
|
||||
Perl and Lua scripting support, a plugin API, multiple server/channel
|
||||
windows, spell checking, multiple authentication methods including SASL, and
|
||||
customizable notifications. For more information on IRC, see
|
||||
http://irchelp.org/.
|
||||
|
||||
Package: zoitechat-common
|
||||
Architecture: all
|
||||
Multi-Arch: foreign
|
||||
Provides: irc-client
|
||||
Depends: ${misc:Depends}
|
||||
Recommends:
|
||||
ca-certificates,
|
||||
zoitechat-lua,
|
||||
zoitechat-perl,
|
||||
zoitechat-plugins,
|
||||
libglib2.0-bin
|
||||
Suggests:
|
||||
zoitechat,
|
||||
zoitechat-python3,
|
||||
zoitechat-otr,
|
||||
unifont
|
||||
Description: Common data files for ZoiteChat
|
||||
This package includes architecture-independent files for ZoiteChat, such as
|
||||
translations, desktop integration, and shared data.
|
||||
|
||||
Package: zoitechat-perl
|
||||
Architecture: any
|
||||
Multi-Arch: same
|
||||
Depends:
|
||||
zoitechat (= ${binary:Version}),
|
||||
${misc:Depends},
|
||||
${shlibs:Depends}
|
||||
Description: Perl plugin for ZoiteChat
|
||||
This package contains the Perl plugin for ZoiteChat. It is split out from the
|
||||
main package because it is optional.
|
||||
|
||||
Package: zoitechat-python3
|
||||
Architecture: any
|
||||
Multi-Arch: same
|
||||
Depends:
|
||||
zoitechat (= ${binary:Version}),
|
||||
python3-cffi-backend,
|
||||
${misc:Depends},
|
||||
${shlibs:Depends}
|
||||
Description: Python 3 plugin for ZoiteChat
|
||||
This package contains the Python 3 plugin for ZoiteChat. It is split out from
|
||||
the main package because it is optional.
|
||||
.
|
||||
Known issue: the Python plugin may freeze the client in some builds.
|
||||
|
||||
Package: zoitechat-lua
|
||||
Architecture: any
|
||||
Multi-Arch: same
|
||||
Depends:
|
||||
zoitechat (= ${binary:Version}),
|
||||
${misc:Depends},
|
||||
${shlibs:Depends}
|
||||
Description: Lua plugin for ZoiteChat
|
||||
This package contains the Lua plugin for ZoiteChat. It is split out from the
|
||||
main package because it is optional.
|
||||
|
||||
Package: zoitechat-plugins
|
||||
Architecture: any
|
||||
Multi-Arch: same
|
||||
Depends:
|
||||
zoitechat (= ${binary:Version}),
|
||||
${misc:Depends},
|
||||
${shlibs:Depends}
|
||||
Suggests: pciutils
|
||||
Description: Extra plugins for ZoiteChat
|
||||
This package contains optional plugins (e.g. FiSHLiM, Sysinfo, Do At and
|
||||
Checksum). These are split out from the main package because they are not
|
||||
required for core functionality.
|
||||
|
||||
Package: zoitechat-dev
|
||||
Architecture: any
|
||||
Multi-Arch: same
|
||||
Depends:
|
||||
zoitechat-common (= ${binary:Version}),
|
||||
${misc:Depends}
|
||||
Description: Development files for ZoiteChat plugins
|
||||
This package contains zoitechat-plugin.h and zoitechat-plugin.pc, which
|
||||
facilitate building binary plugins for ZoiteChat.
|
||||
@@ -1,188 +0,0 @@
|
||||
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
|
||||
Upstream-Name: zoitechat
|
||||
Source: https://zoitechat.zoite.net
|
||||
|
||||
Files: *
|
||||
Copyright: 1998-2010 Peter Zelezny
|
||||
2009-2013 Berke Viktor
|
||||
2015-2021 Patrick Griffis
|
||||
License: GPL-2+ with OpenSSL exception
|
||||
|
||||
Files: debian/*
|
||||
Copyright: 2014 Jesse Rhodes <drubo@drubo.net>
|
||||
2016-2022 Mattia Rizzolo <mattia@debian.org>
|
||||
2020-2024 Gianfranco Costamagna <locutusofborg@debian.org>
|
||||
License: GPL-2+
|
||||
|
||||
Files: data/man/zoitechat.1.in
|
||||
Copyright: Davide Puricelli <evo@debian.org>
|
||||
License: GPL-2+
|
||||
|
||||
Files: osx/gtkrc
|
||||
Copyright: 2012 Xamarin Inc.
|
||||
License: GPL-2+
|
||||
|
||||
Files: plugins/checksum/* plugins/exec/*
|
||||
Copyright: 2010-2012 Berke Viktor
|
||||
License: Expat
|
||||
|
||||
Files: plugins/fishlim/*
|
||||
Copyright: 2010 Samuel Lidén Borell <samuel@kodafritt.se>
|
||||
2015 <the.cypher@gmail.com>
|
||||
2019-2020 <bakasura@protonmail.ch>
|
||||
License: Expat
|
||||
|
||||
Files: plugins/lua/*
|
||||
Copyright: 2015-2016 mniip
|
||||
License: Expat
|
||||
|
||||
Files: plugins/perl/*
|
||||
Copyright: 1998-2002 Peter Zelezny
|
||||
License: GPL-2+
|
||||
|
||||
Files: plugins/python/*
|
||||
Copyright: 2002-2003 Gustavo Niemeyer <niemeyer@conectiva.com>
|
||||
License: GPL-2+
|
||||
|
||||
Files: plugins/sysinfo/*
|
||||
Copyright: 2003-2005 Michael Shoup
|
||||
2005-2007 Tony Vroon
|
||||
2012 Berke Viktor
|
||||
2015 Patrick Griffis
|
||||
License: GPL-2+
|
||||
|
||||
Files: plugins/winamp/*
|
||||
Copyright: Leo <leo.nard@free.fr>
|
||||
Silverex <SilvereX@karklas.mif.vu.lt>
|
||||
Derek Buitenhuis <daemon404@gmail.com>
|
||||
Berke Viktor <berkeviktor@aol.com>
|
||||
License: GPL-1.0
|
||||
|
||||
Files: src/common/dbus/*
|
||||
Copyright: 2006 Claessens Xavier
|
||||
License: GPL-2+
|
||||
|
||||
Files: src/common/dbus/example.py
|
||||
Copyright: 1998-2010 Peter Zelezny
|
||||
2009-2013 Berke Viktor
|
||||
License: GPL-2+
|
||||
|
||||
Files: src/common/scram.*
|
||||
Copyright: 2023 Patrick Okraku
|
||||
License: GPL-2+
|
||||
|
||||
Files: src/common/ssl.c
|
||||
Copyright: 2000 DaP <profeta@freemail.c3.hu>
|
||||
License: GPL-2+ with OpenSSL exception
|
||||
|
||||
Files: src/dirent/dirent-win32.h
|
||||
Copyright: 2006-2012 Toni Ronkko
|
||||
License: Expat
|
||||
|
||||
Files: src/fe-gtk/sexy-iso-codes.c src/fe-gtk/sexy-iso-codes.h
|
||||
Copyright: 2008 Novell, Inc.
|
||||
2013 Sandro Mani
|
||||
License: GPL-2+
|
||||
|
||||
Files: src/fe-gtk/sexy-spell-entry.c src/fe-gtk/sexy-spell-entry.h
|
||||
Copyright: 2002 Evan Martin
|
||||
2004-2006 Christian Hammond
|
||||
License: LGPL-2.1+
|
||||
|
||||
License: GPL-2+ with OpenSSL exception
|
||||
This package is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
.
|
||||
This package is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
.
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this package; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
.
|
||||
On Debian systems, the complete text of the GNU General
|
||||
Public License can be found in `/usr/share/common-licenses/GPL-2'.
|
||||
.
|
||||
In addition, as a special exception, the copyright holders give permission
|
||||
to link the code of portions of this program with the OpenSSL library.
|
||||
You must obey the GNU General Public License in all respects for all of
|
||||
the code used other than OpenSSL. If you modify file(s) with this
|
||||
exception, you may extend this exception to your version of the file(s),
|
||||
but you are not obligated to do so. If you do not wish to do so, delete
|
||||
this exception statement from your version. If you delete this exception
|
||||
statement from all source files in the program, then also delete it here.
|
||||
|
||||
License: Expat
|
||||
.
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
.
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
.
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
License: GPL-2+
|
||||
This package is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
.
|
||||
This package is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
.
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this package; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
.
|
||||
On Debian systems, the complete text of the GNU General
|
||||
Public License can be found in `/usr/share/common-licenses/GPL-2'.
|
||||
|
||||
License: GPL-1.0
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 1, or (at your option)
|
||||
any later version.
|
||||
.
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
.
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
|
||||
02110-1301, USA.
|
||||
|
||||
License: LGPL-2.1+
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
.
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
.
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA
|
||||
@@ -1,40 +0,0 @@
|
||||
Description: Changed default network to OFTC,
|
||||
suggests to join #debian on OFTC and Freenode
|
||||
|
||||
diff --git a/src/common/servlist.c b/src/common/servlist.c
|
||||
index a203e702..22fcd92b 100644
|
||||
--- a/src/common/servlist.c
|
||||
+++ b/src/common/servlist.c
|
||||
@@ -902,7 +902,7 @@ servlist_load_defaults (void)
|
||||
{
|
||||
int i = 0, j = 0;
|
||||
ircnet *net = NULL;
|
||||
- guint def_hash = g_str_hash ("Libera.Chat");
|
||||
+ guint def_hash = g_str_hash ("OFTC");
|
||||
|
||||
while (1)
|
||||
{
|
||||
diff --git a/src/fe-gtk/joind.c b/src/fe-gtk/joind.c
|
||||
index ce3cbcae..7f6b1116 100644
|
||||
--- a/src/fe-gtk/joind.c
|
||||
+++ b/src/fe-gtk/joind.c
|
||||
@@ -247,10 +247,18 @@ joind_show_dialog (server *serv)
|
||||
G_CALLBACK (joind_ok_cb), serv);
|
||||
|
||||
if (serv->network)
|
||||
+ {
|
||||
+ if (g_ascii_strcasecmp(((ircnet*)serv->network)->name, "OFTC") == 0)
|
||||
+ {
|
||||
+ gtk_entry_set_text (GTK_ENTRY (entry1), "#debian");
|
||||
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(radiobutton2), TRUE);
|
||||
+ }
|
||||
if (g_ascii_strcasecmp(((ircnet*)serv->network)->name, "Libera.Chat") == 0)
|
||||
{
|
||||
- gtk_entry_set_text (GTK_ENTRY (entry1), "#hexchat");
|
||||
+ gtk_entry_set_text (GTK_ENTRY (entry1), "#debian");
|
||||
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(radiobutton2), TRUE);
|
||||
}
|
||||
+ }
|
||||
|
||||
gtk_widget_grab_focus (okbutton1);
|
||||
gtk_widget_show_all (dialog1);
|
||||
@@ -1,43 +0,0 @@
|
||||
Description: Changed default channel to join from #hexchat to #ubuntu
|
||||
Also adds a "Ubuntu servers" entry, same as connecting to libera.chat.
|
||||
|
||||
diff --git a/src/common/servlist.c b/src/common/servlist.c
|
||||
index a203e702..18a6c4b3 100644
|
||||
--- a/src/common/servlist.c
|
||||
+++ b/src/common/servlist.c
|
||||
@@ -206,6 +206,9 @@ static const struct defaultserver def[] =
|
||||
{"Libera.Chat", 0, 0, 0, LOGIN_SASL, 0, TRUE},
|
||||
{0, "irc.libera.chat"},
|
||||
|
||||
+ {"Ubuntu Servers (Libera.Chat)", 0, 0, 0, LOGIN_SASL, 0, TRUE},
|
||||
+ {0, "irc.libera.chat"},
|
||||
+
|
||||
#ifdef USE_OPENSSL
|
||||
{"LibertaCasa", 0, 0, 0, LOGIN_SASL, 0, TRUE},
|
||||
{0, "irc.liberta.casa"},
|
||||
@@ -902,7 +905,7 @@ servlist_load_defaults (void)
|
||||
{
|
||||
int i = 0, j = 0;
|
||||
ircnet *net = NULL;
|
||||
- guint def_hash = g_str_hash ("Libera.Chat");
|
||||
+ guint def_hash = g_str_hash ("Ubuntu Servers (Libera.Chat)");
|
||||
|
||||
while (1)
|
||||
{
|
||||
diff --git a/src/fe-gtk/joind.c b/src/fe-gtk/joind.c
|
||||
index ce3cbcae..e94e562a 100644
|
||||
--- a/src/fe-gtk/joind.c
|
||||
+++ b/src/fe-gtk/joind.c
|
||||
@@ -247,9 +247,10 @@ joind_show_dialog (server *serv)
|
||||
G_CALLBACK (joind_ok_cb), serv);
|
||||
|
||||
if (serv->network)
|
||||
- if (g_ascii_strcasecmp(((ircnet*)serv->network)->name, "Libera.Chat") == 0)
|
||||
+ if (g_ascii_strcasecmp(((ircnet*)serv->network)->name, "Ubuntu Servers (Libera.Chat)") == 0)
|
||||
{
|
||||
- gtk_entry_set_text (GTK_ENTRY (entry1), "#hexchat");
|
||||
+ gtk_entry_set_text (GTK_ENTRY (entry1), "#ubuntu");
|
||||
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(radiobutton2), TRUE);
|
||||
}
|
||||
|
||||
gtk_widget_grab_focus (okbutton1);
|
||||
@@ -1,20 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<component type="desktop-application">
|
||||
<id>net.zoite.Zoitechat</id>
|
||||
<name>ZoiteChat</name>
|
||||
<summary>IRC client for GNOME</summary>
|
||||
<metadata_license>CC0-1.0</metadata_license>
|
||||
<project_license>GPL-2.0-or-later</project_license>
|
||||
|
||||
<description>
|
||||
<p>ZoiteChat is a graphical IRC client based on HexChat.</p>
|
||||
<p>Current Flatpak builds have a known issue where the Python plugin can freeze the client.</p>
|
||||
</description>
|
||||
|
||||
<launchable type="desktop-id">net.zoite.Zoitechat.desktop</launchable>
|
||||
<provides>
|
||||
<binary>zoitechat</binary>
|
||||
</provides>
|
||||
|
||||
<url type="homepage">https://zoitechat.zoite.net/</url>
|
||||
</component>
|
||||
@@ -1 +0,0 @@
|
||||
readmechanges.patch
|
||||
@@ -1,14 +0,0 @@
|
||||
#!/usr/bin/make -f
|
||||
|
||||
export DH_VERBOSE=1
|
||||
|
||||
%:
|
||||
dh $@ --buildsystem=meson
|
||||
|
||||
override_dh_auto_configure:
|
||||
dh_auto_configure -- \
|
||||
-Dinstall-plugin-metainfo=false \
|
||||
-Dwith-lua=lua53
|
||||
|
||||
override_dh_installchangelogs:
|
||||
dh_installchangelogs debian/changelog.txt
|
||||
@@ -1 +0,0 @@
|
||||
3.0 (quilt)
|
||||
@@ -1,2 +0,0 @@
|
||||
# the upstream maintainer says that he doesn't have time to go fish out his GPG key for now
|
||||
orig-tarball-missing-upstream-signature
|
||||
@@ -1,4 +0,0 @@
|
||||
Bug-Database: https://github.com/zoitechat/zoitechat/issues
|
||||
Bug-Submit: https://github.com/zoitechat/zoitechat/issues/new
|
||||
Repository: https://github.com/zoitechat/zoitechat.git
|
||||
Repository-Browse: https://github.com/zoitechat/zoitechat
|
||||
@@ -1,72 +0,0 @@
|
||||
pub rsa4096 2014-02-13 [SC] [expires: 2024-02-08]
|
||||
108BF2212A051F4A72B18448B3C7CE210DE76DFC
|
||||
uid [ unknown] Patrick Griffis <tingping@tingping.se>
|
||||
uid [ unknown] TingPing <tingping@fedoraproject.org>
|
||||
sub rsa4096 2014-02-13 [E] [expires: 2024-02-08]
|
||||
C6CAF2A624B9C2ECBF83ACBF488A9319DABACE61
|
||||
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
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
|
||||
cBfbvGaxikGVOqMEoNo/umEhsyleb0gqXIoZJrc=
|
||||
=kssP
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
@@ -1,5 +0,0 @@
|
||||
version=4
|
||||
opts="searchmode=plain,\
|
||||
filenamemangle=s%.*/v?@ANY_VERSION@%@PACKAGE@-$1.tar.xz%" \
|
||||
https://api.github.com/repos/zoitechat/zoitechat/releases?per_page=50 \
|
||||
https://api.github.com/repos/[^/]+/[^/]+/tarball/v?@ANY_VERSION@
|
||||
@@ -1 +0,0 @@
|
||||
dh_installchangelogs
|
||||
@@ -1,3 +0,0 @@
|
||||
usr/bin/zoitechat
|
||||
usr/share/applications
|
||||
usr/share/metainfo/net.zoite.Zoitechat.appdata.xml
|
||||
@@ -1,6 +0,0 @@
|
||||
# intentional typo as example for autoreplace function
|
||||
zoitechat: spelling-error-in-binary usr/bin/zoitechat teh the
|
||||
# upstream will not correct misspelled variable names
|
||||
zoitechat: spelling-error-in-binary usr/bin/zoitechat hilight highlight
|
||||
# fixing this spelling error would break scripting/theming
|
||||
zoitechat: spelling-error-in-binary usr/bin/zoitechat Conection Connection
|
||||
@@ -0,0 +1,15 @@
|
||||
# Source https://coderwall.com/p/wws2uq
|
||||
sudo: false
|
||||
language: python
|
||||
python:
|
||||
- "2.7"
|
||||
cache:
|
||||
pip: true
|
||||
custom_install: true
|
||||
# command to install dependencies
|
||||
install: pip install --upgrade Sphinx
|
||||
# command to run tests
|
||||
script: sphinx-build -n -b html -d _build/doctrees . _build/html
|
||||
# Flags used here, not in `make html`:
|
||||
# -n Run in nit-picky mode. Currently, this generates warnings for all missing references.
|
||||
# -W Turn warnings into errors. This means that the build stops at the first warning and sphinx-build exits with exit status 1.
|
||||
@@ -0,0 +1,94 @@
|
||||
[main]
|
||||
host = https://www.transifex.com
|
||||
type = PO
|
||||
|
||||
[zoitechat-documentation.addons]
|
||||
file_filter = po/<lang>/LC_MESSAGES/addons.po
|
||||
source_file = _build/locale/addons.pot
|
||||
source_lang = en
|
||||
|
||||
[zoitechat-documentation.appearance]
|
||||
file_filter = po/<lang>/LC_MESSAGES/appearance.po
|
||||
source_file = _build/locale/appearance.pot
|
||||
source_lang = en
|
||||
|
||||
[zoitechat-documentation.building]
|
||||
file_filter = po/<lang>/LC_MESSAGES/building.po
|
||||
source_file = _build/locale/building.pot
|
||||
source_lang = en
|
||||
|
||||
[zoitechat-documentation.changelog]
|
||||
file_filter = po/<lang>/LC_MESSAGES/changelog.po
|
||||
source_file = _build/locale/changelog.pot
|
||||
source_lang = en
|
||||
|
||||
[zoitechat-documentation.commands]
|
||||
file_filter = po/<lang>/LC_MESSAGES/commands.po
|
||||
source_file = _build/locale/commands.pot
|
||||
source_lang = en
|
||||
|
||||
#[zoitechat-documentation.developers]
|
||||
#file_filter = po/<lang>/LC_MESSAGES/developers.po
|
||||
#source_file = _build/locale/developers.pot
|
||||
#source_lang = en
|
||||
|
||||
[zoitechat-documentation.faq]
|
||||
file_filter = po/<lang>/LC_MESSAGES/faq.po
|
||||
source_file = _build/locale/faq.pot
|
||||
source_lang = en
|
||||
|
||||
#[zoitechat-documentation.getting_started]
|
||||
#file_filter = po/<lang>/LC_MESSAGES/getting_started.po
|
||||
#source_file = _build/locale/getting_started.pot
|
||||
#source_lang = en
|
||||
|
||||
#[zoitechat-documentation.helping]
|
||||
#file_filter = po/<lang>/LC_MESSAGES/helping.po
|
||||
#source_file = _build/locale/helping.pot
|
||||
#source_lang = en
|
||||
|
||||
#[zoitechat-documentation.index]
|
||||
#file_filter = po/<lang>/LC_MESSAGES/index.po
|
||||
#source_file = _build/locale/index.pot
|
||||
#source_lang = en
|
||||
|
||||
#[zoitechat-documentation.perl_modules]
|
||||
#file_filter = po/<lang>/LC_MESSAGES/perl_modules.po
|
||||
#source_file = _build/locale/perl_modules.pot
|
||||
#source_lang = en
|
||||
|
||||
#[zoitechat-documentation.plugins]
|
||||
#file_filter = po/<lang>/LC_MESSAGES/plugins.po
|
||||
#source_file = _build/locale/plugins.pot
|
||||
#source_lang = en
|
||||
|
||||
#[zoitechat-documentation.script_dbus]
|
||||
#file_filter = po/<lang>/LC_MESSAGES/script_dbus.po
|
||||
#source_file = _build/locale/script_dbus.pot
|
||||
#source_lang = en
|
||||
|
||||
#[zoitechat-documentation.script_javascript]
|
||||
#file_filter = po/<lang>/LC_MESSAGES/script_javascript.po
|
||||
#source_file = _build/locale/script_javascript.pot
|
||||
#source_lang = en
|
||||
|
||||
#[zoitechat-documentation.script_perl]
|
||||
#file_filter = po/<lang>/LC_MESSAGES/script_perl.po
|
||||
#source_file = _build/locale/script_perl.pot
|
||||
#source_lang = en
|
||||
|
||||
#[zoitechat-documentation.script_python]
|
||||
#file_filter = po/<lang>/LC_MESSAGES/script_python.po
|
||||
#source_file = _build/locale/script_python.pot
|
||||
#source_lang = en
|
||||
|
||||
[zoitechat-documentation.settings]
|
||||
file_filter = po/<lang>/LC_MESSAGES/settings.po
|
||||
source_file = _build/locale/settings.pot
|
||||
source_lang = en
|
||||
|
||||
[zoitechat-documentation.tips]
|
||||
file_filter = po/<lang>/LC_MESSAGES/tips.po
|
||||
source_file = _build/locale/tips.pot
|
||||
source_lang = en
|
||||
|
||||
@@ -0,0 +1,157 @@
|
||||
# Makefile for Sphinx documentation
|
||||
#
|
||||
|
||||
# You can set these variables from the command line.
|
||||
SPHINXOPTS =
|
||||
SPHINXBUILD = sphinx-build
|
||||
PAPER =
|
||||
BUILDDIR = _build
|
||||
|
||||
# Internal variables.
|
||||
PAPEROPT_a4 = -D latex_paper_size=a4
|
||||
PAPEROPT_letter = -D latex_paper_size=letter
|
||||
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
|
||||
# the i18n builder cannot share the environment and doctrees with the others
|
||||
I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
|
||||
|
||||
.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext
|
||||
|
||||
help:
|
||||
@echo "Please use \`make <target>' where <target> is one of"
|
||||
@echo " html to make standalone HTML files"
|
||||
@echo " dirhtml to make HTML files named index.html in directories"
|
||||
@echo " singlehtml to make a single large HTML file"
|
||||
@echo " pickle to make pickle files"
|
||||
@echo " json to make JSON files"
|
||||
@echo " htmlhelp to make HTML files and a HTML help project"
|
||||
@echo " qthelp to make HTML files and a qthelp project"
|
||||
@echo " devhelp to make HTML files and a Devhelp project"
|
||||
@echo " epub to make an epub"
|
||||
@echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
|
||||
@echo " latexpdf to make LaTeX files and run them through pdflatex"
|
||||
@echo " text to make text files"
|
||||
@echo " man to make manual pages"
|
||||
@echo " texinfo to make Texinfo files"
|
||||
@echo " info to make Texinfo files and run them through makeinfo"
|
||||
@echo " gettext to make PO message catalogs"
|
||||
@echo " changes to make an overview of all changed/added/deprecated items"
|
||||
@echo " linkcheck to check all external links for integrity"
|
||||
@echo " doctest to run all doctests embedded in the documentation (if enabled)"
|
||||
|
||||
clean:
|
||||
-rm -rf $(BUILDDIR)/*
|
||||
|
||||
html:
|
||||
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
|
||||
@echo
|
||||
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
|
||||
|
||||
dirhtml:
|
||||
$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
|
||||
@echo
|
||||
@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
|
||||
|
||||
singlehtml:
|
||||
$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
|
||||
@echo
|
||||
@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
|
||||
|
||||
pickle:
|
||||
$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
|
||||
@echo
|
||||
@echo "Build finished; now you can process the pickle files."
|
||||
|
||||
json:
|
||||
$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
|
||||
@echo
|
||||
@echo "Build finished; now you can process the JSON files."
|
||||
|
||||
htmlhelp:
|
||||
$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
|
||||
@echo
|
||||
@echo "Build finished; now you can run HTML Help Workshop with the" \
|
||||
".hhp project file in $(BUILDDIR)/htmlhelp."
|
||||
|
||||
qthelp:
|
||||
$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
|
||||
@echo
|
||||
@echo "Build finished; now you can run "qcollectiongenerator" with the" \
|
||||
".qhcp project file in $(BUILDDIR)/qthelp, like this:"
|
||||
@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/ZoiteChat.qhcp"
|
||||
@echo "To view the help file:"
|
||||
@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/ZoiteChat.qhc"
|
||||
|
||||
devhelp:
|
||||
$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
|
||||
@echo
|
||||
@echo "Build finished."
|
||||
@echo "To view the help file:"
|
||||
@echo "# mkdir -p $$HOME/.local/share/devhelp/ZoiteChat"
|
||||
@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/ZoiteChat"
|
||||
@echo "# devhelp"
|
||||
|
||||
epub:
|
||||
$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
|
||||
@echo
|
||||
@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
|
||||
|
||||
latex:
|
||||
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
||||
@echo
|
||||
@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
|
||||
@echo "Run \`make' in that directory to run these through (pdf)latex" \
|
||||
"(use \`make latexpdf' here to do that automatically)."
|
||||
|
||||
latexpdf:
|
||||
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
||||
@echo "Running LaTeX files through pdflatex..."
|
||||
$(MAKE) -C $(BUILDDIR)/latex all-pdf
|
||||
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
|
||||
|
||||
text:
|
||||
$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
|
||||
@echo
|
||||
@echo "Build finished. The text files are in $(BUILDDIR)/text."
|
||||
|
||||
man:
|
||||
$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
|
||||
@echo
|
||||
@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
|
||||
|
||||
texinfo:
|
||||
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
|
||||
@echo
|
||||
@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
|
||||
@echo "Run \`make' in that directory to run these through makeinfo" \
|
||||
"(use \`make info' here to do that automatically)."
|
||||
|
||||
info:
|
||||
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
|
||||
@echo "Running Texinfo files through makeinfo..."
|
||||
make -C $(BUILDDIR)/texinfo info
|
||||
@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
|
||||
|
||||
gettext:
|
||||
$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
|
||||
@echo
|
||||
@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
|
||||
|
||||
changes:
|
||||
$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
|
||||
@echo
|
||||
@echo "The overview file is in $(BUILDDIR)/changes."
|
||||
|
||||
linkcheck:
|
||||
$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
|
||||
@echo
|
||||
@echo "Link check complete; look for any errors in the above output " \
|
||||
"or in $(BUILDDIR)/linkcheck/output.txt."
|
||||
|
||||
doctest:
|
||||
$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
|
||||
@echo "Testing of doctests in the sources finished, look at the " \
|
||||
"results in $(BUILDDIR)/doctest/output.txt."
|
||||
|
||||
server:
|
||||
@cd $(BUILDDIR)/html
|
||||
@python -u -m SimpleHTTPServer
|
||||
@@ -0,0 +1,90 @@
|
||||
# ZoiteChat documentation
|
||||
|
||||
## Getting started
|
||||
|
||||
* Install [Python 3](https://www.python.org/)
|
||||
* Install pip for Python 3
|
||||
* Install Sphinx: `python -m pip install sphinx`
|
||||
* On Windows: ensure your Python 3 installation is on `PATH`
|
||||
* Run `make html` to build the HTML files
|
||||
* Run the Python webserver to test your changes: `make server`
|
||||
(http://localhost:8000/)
|
||||
|
||||
|
||||
## Conventions
|
||||
|
||||
* 4 Spaces are used for indentation.
|
||||
* Ordered or unordered lists use visual indentation, where any non-list
|
||||
subelement would use an indentation of a multiple of 4 again.
|
||||
|
||||
Example:
|
||||
|
||||
```rest
|
||||
- a list item
|
||||
- a list item
|
||||
with a visually indented continuation
|
||||
- a list item with a sub-list
|
||||
|
||||
- that is also visually indented
|
||||
- a list item with a code block
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
that is not visually indented
|
||||
```
|
||||
|
||||
## HTML theme
|
||||
|
||||
The `zoitechat` theme inherits Sphinx's built-in `basic` theme. It uses the
|
||||
same compact layout, blue navigation, and system fonts as zoitechat.org.
|
||||
Appearance starts in System mode on each page. Light and Dark are available
|
||||
for the current page; no cookies or browser storage are used.
|
||||
|
||||
The theme's templates are in `_theme/zoitechat/`. Its readable CSS and
|
||||
JavaScript are in `_static/css/zoitechat-docs.css` and
|
||||
`_static/js/zoitechat-docs.js`. No minification, JavaScript package manager,
|
||||
external fonts, or CDN assets are required.
|
||||
|
||||
Navigation URLs, including `zoite_atlas_url`, are configured through
|
||||
`html_context` in `conf.py`. The logo
|
||||
is `_static/zoitechat-logo.svg`. Standard Sphinx search, indexes, source
|
||||
links, anchors, translations, and previous/next links remain available.
|
||||
The HTML output also works as locally installed documentation; project-site
|
||||
links only access the network when clicked.
|
||||
|
||||
Build from the repository root:
|
||||
|
||||
```sh
|
||||
sphinx-build -b html docs docs/_build/html
|
||||
```
|
||||
|
||||
Use a clean output directory when switching themes so stale assets from
|
||||
earlier builds are not included in a package.
|
||||
|
||||
## Debian packaging
|
||||
|
||||
The `zoitechat` theme uses Sphinx's built-in `basic` theme. It does not
|
||||
bundle Bootstrap, jQuery, jQuery Cookie, Font Awesome, or icon fonts.
|
||||
Its font stack includes DejaVu Sans and DejaVu Sans Mono; no font files
|
||||
are bundled by the theme.
|
||||
|
||||
No pre-minified third-party theme assets need to be added or rebuilt.
|
||||
|
||||
The Meson option `-Dinstall-docs` defaults to `false`, so platforms that
|
||||
do not ship offline documentation do not need Sphinx just to build ZoiteChat.
|
||||
Pass `-Dinstall-docs=true` when packaging local HTML documentation. Fedora
|
||||
and AppImage enable it explicitly; the Debian documentation package can do
|
||||
the same.
|
||||
|
||||
Build with the distribution's `python3-sphinx`. After installing the HTML
|
||||
into the package staging directory, use `dh_sphinxdoc` (or `dh --with
|
||||
sphinxdoc`) to replace Sphinx's standard JavaScript files with system
|
||||
symlinks. Include `${sphinxdoc:Depends}` in the package dependencies and
|
||||
`${sphinxdoc:Built-Using}` where required for generated assets. The custom
|
||||
`zoitechat-docs.js` remains a small, readable project source file.
|
||||
|
||||
A built-in theme is still selectable with `-D html_theme=classic` if a
|
||||
packager needs a different layout. The old RST content has existing build
|
||||
diagnostics; changing the theme does not suppress or alter them.
|
||||
|
||||
Shared website chrome is in `_static/css/zoitechat-site.css`, copied from the main site. Keep that readable stylesheet in sync when changing the shared header, navigation, typography, or colours.
|
||||
@@ -0,0 +1,843 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
/* Keep the docs close to the desktop client and the main project's website. */
|
||||
:root {
|
||||
color-scheme: light;
|
||||
--page: #ffffff;
|
||||
--panel: #f1f2f3;
|
||||
--text: #25282c;
|
||||
--muted: #58616b;
|
||||
--line: #bdc3c9;
|
||||
--soft-line: #dce0e4;
|
||||
--blue: #215a9e;
|
||||
--link: #174f92;
|
||||
--selection: #e6effa;
|
||||
--code: #f2f4f6;
|
||||
--comment: #58616b;
|
||||
--string: #236741;
|
||||
--number: #7842ab;
|
||||
--font: system-ui, -apple-system, "Segoe UI", "DejaVu Sans", sans-serif;
|
||||
--mono: Consolas, "DejaVu Sans Mono", "Liberation Mono", monospace;
|
||||
}
|
||||
|
||||
html[data-theme="dark"] {
|
||||
color-scheme: dark;
|
||||
--page: #191c1f;
|
||||
--panel: #25292d;
|
||||
--text: #eef0f2;
|
||||
--muted: #b2bbc4;
|
||||
--line: #50575e;
|
||||
--soft-line: #353c43;
|
||||
--blue: #2865a8;
|
||||
--link: #8dc0ff;
|
||||
--selection: #233951;
|
||||
--code: #111518;
|
||||
--comment: #b2bbc4;
|
||||
--string: #92d5ab;
|
||||
--number: #dfacff;
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
:root:not([data-theme]) {
|
||||
color-scheme: dark;
|
||||
--page: #191c1f;
|
||||
--panel: #25292d;
|
||||
--text: #eef0f2;
|
||||
--muted: #b2bbc4;
|
||||
--line: #50575e;
|
||||
--soft-line: #353c43;
|
||||
--blue: #2865a8;
|
||||
--link: #8dc0ff;
|
||||
--selection: #233951;
|
||||
--code: #111518;
|
||||
--comment: #b2bbc4;
|
||||
--string: #92d5ab;
|
||||
--number: #dfacff;
|
||||
}
|
||||
}
|
||||
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
html {
|
||||
scroll-padding-top: 16px;
|
||||
}
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
background: var(--page);
|
||||
color: var(--text);
|
||||
font: 14px/1.7 var(--font);
|
||||
}
|
||||
|
||||
a,
|
||||
a:visited {
|
||||
color: var(--link);
|
||||
text-underline-offset: 3px;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
:focus-visible {
|
||||
outline: 3px solid var(--link);
|
||||
outline-offset: 3px;
|
||||
}
|
||||
|
||||
[hidden] {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
button,
|
||||
input,
|
||||
select {
|
||||
font: inherit;
|
||||
}
|
||||
|
||||
button,
|
||||
summary,
|
||||
select {
|
||||
touch-action: manipulation;
|
||||
}
|
||||
|
||||
button,
|
||||
summary {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
img {
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4 {
|
||||
color: var(--text);
|
||||
font-family: var(--font);
|
||||
font-weight: 600;
|
||||
line-height: 1.35;
|
||||
}
|
||||
|
||||
h1 {
|
||||
margin: 0 0 20px;
|
||||
font-size: 28px;
|
||||
letter-spacing: -0.5px;
|
||||
}
|
||||
|
||||
h2 {
|
||||
margin: 28px 0 12px;
|
||||
font-size: 21px;
|
||||
}
|
||||
|
||||
h3 {
|
||||
margin: 22px 0 10px;
|
||||
font-size: 17px;
|
||||
}
|
||||
|
||||
h4 {
|
||||
font-size: 15px;
|
||||
}
|
||||
|
||||
p {
|
||||
margin: 0 0 15px;
|
||||
}
|
||||
|
||||
input,
|
||||
select,
|
||||
button {
|
||||
min-height: 34px;
|
||||
border: 1px solid var(--line);
|
||||
border-radius: 2px;
|
||||
padding: 6px 9px;
|
||||
background: var(--page);
|
||||
color: var(--text);
|
||||
}
|
||||
|
||||
input[type="submit"],
|
||||
button {
|
||||
background: var(--panel);
|
||||
}
|
||||
|
||||
input[type="submit"]:hover,
|
||||
button:hover {
|
||||
background: var(--selection);
|
||||
}
|
||||
|
||||
.skip-link {
|
||||
position: absolute;
|
||||
top: -100px;
|
||||
left: 15px;
|
||||
z-index: 10;
|
||||
padding: 10px;
|
||||
background: var(--page);
|
||||
}
|
||||
|
||||
.skip-link:focus {
|
||||
top: 10px;
|
||||
}
|
||||
|
||||
.site-header,
|
||||
.docs-layout,
|
||||
.site-footer {
|
||||
width: min(1200px, calc(100% - 48px));
|
||||
margin-inline: auto;
|
||||
}
|
||||
|
||||
.site-header {
|
||||
padding-top: 32px;
|
||||
}
|
||||
|
||||
.topbar {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
gap: 20px;
|
||||
padding-bottom: 16px;
|
||||
}
|
||||
|
||||
.brand {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 12px;
|
||||
color: var(--text) !important;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.brand img {
|
||||
display: block;
|
||||
width: 38px;
|
||||
height: 42px;
|
||||
}
|
||||
|
||||
.brand strong {
|
||||
font-size: 28px;
|
||||
font-weight: 650;
|
||||
letter-spacing: -0.8px;
|
||||
}
|
||||
|
||||
.appearance {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
color: var(--muted);
|
||||
font-size: 11px;
|
||||
}
|
||||
|
||||
.appearance select {
|
||||
min-height: 30px;
|
||||
padding: 3px 7px;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.site-nav {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: stretch;
|
||||
border: 1px solid var(--line);
|
||||
background: var(--panel);
|
||||
}
|
||||
|
||||
.site-nav > a,
|
||||
.support-menu > summary {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
min-height: 36px;
|
||||
padding: 6px 15px;
|
||||
color: var(--text);
|
||||
font-size: 13px;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.site-nav > a:hover,
|
||||
.support-menu > summary:hover {
|
||||
background: var(--selection);
|
||||
color: var(--link);
|
||||
}
|
||||
|
||||
.site-nav > a.selected {
|
||||
background: var(--blue);
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
.support-menu {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.support-menu > summary {
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
.support-menu > summary::after {
|
||||
content: "⌄";
|
||||
margin-left: 8px;
|
||||
}
|
||||
|
||||
.support-menu > summary::-webkit-details-marker {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.support-links {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 100%;
|
||||
z-index: 5;
|
||||
min-width: 235px;
|
||||
padding: 5px;
|
||||
border: 1px solid var(--line);
|
||||
background: var(--page);
|
||||
}
|
||||
|
||||
.support-links a {
|
||||
display: block;
|
||||
padding: 10px 12px;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.support-links a:hover {
|
||||
background: var(--selection);
|
||||
}
|
||||
|
||||
.support-links small {
|
||||
display: block;
|
||||
color: var(--muted);
|
||||
font-size: 11px;
|
||||
}
|
||||
|
||||
.docs-location {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: start;
|
||||
gap: 20px;
|
||||
margin-top: 12px;
|
||||
color: var(--muted);
|
||||
font-size: 11px;
|
||||
}
|
||||
|
||||
.docs-location nav {
|
||||
min-width: 0;
|
||||
overflow-wrap: anywhere;
|
||||
}
|
||||
|
||||
.docs-location nav > span {
|
||||
margin-inline: 5px;
|
||||
}
|
||||
|
||||
.docs-version {
|
||||
flex-shrink: 0;
|
||||
font-family: var(--mono);
|
||||
}
|
||||
|
||||
.docs-layout {
|
||||
display: grid;
|
||||
grid-template-columns: 240px minmax(0, 1fr);
|
||||
align-items: start;
|
||||
gap: 36px;
|
||||
padding-block: 26px 30px;
|
||||
}
|
||||
|
||||
.docs-layout.no-sidebar {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.docs-sidebar {
|
||||
position: sticky;
|
||||
top: 16px;
|
||||
max-height: calc(100vh - 32px);
|
||||
overflow: auto;
|
||||
padding-right: 15px;
|
||||
border-right: 1px solid var(--soft-line);
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.docs-navigation > summary {
|
||||
margin-bottom: 14px;
|
||||
padding: 5px 0;
|
||||
color: var(--text);
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.docs-sidebar h2,
|
||||
.docs-sidebar h3 {
|
||||
margin: 20px 0 8px;
|
||||
padding-bottom: 5px;
|
||||
border-bottom: 1px solid var(--line);
|
||||
font-size: 14px;
|
||||
letter-spacing: 0;
|
||||
}
|
||||
|
||||
.docs-sidebar ul {
|
||||
margin: 0;
|
||||
padding-left: 17px;
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
.docs-sidebar nav > ul {
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
.docs-sidebar li {
|
||||
margin: 5px 0;
|
||||
line-height: 1.55;
|
||||
}
|
||||
|
||||
.docs-sidebar li.current > a,
|
||||
.docs-sidebar a.current {
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.docs-sidebar .current > a {
|
||||
text-decoration-thickness: 2px;
|
||||
}
|
||||
|
||||
.docs-search > label {
|
||||
display: block;
|
||||
margin-bottom: 5px;
|
||||
color: var(--muted);
|
||||
font-size: 11px;
|
||||
}
|
||||
|
||||
.search-inputs {
|
||||
display: flex;
|
||||
align-items: stretch;
|
||||
gap: 5px;
|
||||
}
|
||||
|
||||
.search-inputs input {
|
||||
width: 100%;
|
||||
min-width: 0;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.search-inputs button {
|
||||
flex-shrink: 0;
|
||||
padding-inline: 7px;
|
||||
font-size: 11px;
|
||||
}
|
||||
|
||||
.docs-content {
|
||||
min-width: 0;
|
||||
overflow-wrap: break-word;
|
||||
}
|
||||
|
||||
.docs-content > :first-child,
|
||||
.docs-content > section:first-child > :first-child {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.docs-content li {
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.docs-content dl {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.docs-content dt {
|
||||
margin-top: 14px;
|
||||
color: var(--text);
|
||||
}
|
||||
|
||||
.docs-content dd {
|
||||
margin-left: 24px;
|
||||
}
|
||||
|
||||
.docs-content code,
|
||||
.docs-content pre,
|
||||
.docs-content kbd {
|
||||
font-family: var(--mono);
|
||||
font-size: 0.9em;
|
||||
}
|
||||
|
||||
.docs-content code.literal {
|
||||
padding: 1px 4px;
|
||||
border: 1px solid var(--soft-line);
|
||||
background: var(--code);
|
||||
}
|
||||
|
||||
.docs-content pre {
|
||||
margin: 0;
|
||||
white-space: pre;
|
||||
line-height: 1.7;
|
||||
}
|
||||
|
||||
.docs-content .highlight,
|
||||
.docs-content .literal-block {
|
||||
max-width: 100%;
|
||||
margin: 16px 0;
|
||||
padding: 14px;
|
||||
overflow-x: auto;
|
||||
border: 1px solid var(--line);
|
||||
background: var(--code);
|
||||
color: var(--text);
|
||||
}
|
||||
|
||||
.highlight pre {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
.highlight span {
|
||||
color: var(--text) !important;
|
||||
}
|
||||
|
||||
.highlight .k,
|
||||
.highlight .kc,
|
||||
.highlight .kd,
|
||||
.highlight .kn,
|
||||
.highlight .kp,
|
||||
.highlight .kr,
|
||||
.highlight .kt,
|
||||
.highlight .o,
|
||||
.highlight .ow,
|
||||
.highlight .nb,
|
||||
.highlight .nf {
|
||||
color: var(--link) !important;
|
||||
}
|
||||
|
||||
.highlight .c,
|
||||
.highlight .c1,
|
||||
.highlight .cm,
|
||||
.highlight .cp,
|
||||
.highlight .cs,
|
||||
.highlight .sd {
|
||||
color: var(--comment) !important;
|
||||
}
|
||||
|
||||
.highlight .s,
|
||||
.highlight .s1,
|
||||
.highlight .s2,
|
||||
.highlight .sa,
|
||||
.highlight .sb,
|
||||
.highlight .sc,
|
||||
.highlight .se,
|
||||
.highlight .sh,
|
||||
.highlight .si,
|
||||
.highlight .sr,
|
||||
.highlight .ss {
|
||||
color: var(--string) !important;
|
||||
}
|
||||
|
||||
.highlight .m,
|
||||
.highlight .mb,
|
||||
.highlight .mf,
|
||||
.highlight .mh,
|
||||
.highlight .mi,
|
||||
.highlight .mo,
|
||||
.highlight .il {
|
||||
color: var(--number) !important;
|
||||
}
|
||||
|
||||
table.docutils,
|
||||
table.indextable,
|
||||
table.genindextable {
|
||||
width: 100%;
|
||||
margin: 16px 0;
|
||||
border-collapse: collapse;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
table.docutils th,
|
||||
table.docutils td {
|
||||
padding: 9px 12px;
|
||||
border: 1px solid var(--line);
|
||||
text-align: left;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
table.docutils th {
|
||||
background: var(--panel);
|
||||
}
|
||||
|
||||
table.docutils tbody tr:nth-child(even) {
|
||||
background: var(--panel);
|
||||
}
|
||||
|
||||
table.genindextable td,
|
||||
table.indextable td {
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.docs-content .admonition,
|
||||
.docs-content .topic,
|
||||
.docs-content .sidebar {
|
||||
float: none;
|
||||
width: auto;
|
||||
margin: 18px 0;
|
||||
padding: 12px 16px;
|
||||
border: 1px solid var(--soft-line);
|
||||
border-left: 3px solid var(--blue);
|
||||
background: var(--panel);
|
||||
color: var(--text);
|
||||
}
|
||||
|
||||
.docs-content .admonition-title,
|
||||
.docs-content .topic-title,
|
||||
.docs-content .sidebar-title {
|
||||
margin-bottom: 6px;
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.docs-content .admonition > :last-child,
|
||||
.docs-content .topic > :last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.docs-content img,
|
||||
.docs-content .figure {
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.docs-content img {
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.docs-content .figure {
|
||||
margin-inline: 0;
|
||||
}
|
||||
|
||||
.docs-content .caption {
|
||||
color: var(--muted);
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
a.headerlink {
|
||||
padding-left: 6px;
|
||||
color: var(--muted);
|
||||
font-size: 0.8em;
|
||||
text-decoration: none;
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
h1:hover > .headerlink,
|
||||
h2:hover > .headerlink,
|
||||
h3:hover > .headerlink,
|
||||
h4:hover > .headerlink,
|
||||
dt:hover > .headerlink,
|
||||
a.headerlink:focus-visible {
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
.highlighted {
|
||||
background: var(--selection);
|
||||
color: var(--text);
|
||||
}
|
||||
|
||||
.page-relations {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
gap: 24px;
|
||||
margin-top: 32px;
|
||||
padding-top: 16px;
|
||||
border-top: 1px solid var(--line);
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.page-relations > div {
|
||||
max-width: 46%;
|
||||
}
|
||||
|
||||
.page-relations > div:last-child {
|
||||
margin-left: auto;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.page-relations small {
|
||||
display: block;
|
||||
color: var(--muted);
|
||||
font-size: 11px;
|
||||
}
|
||||
|
||||
.site-footer {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: space-between;
|
||||
gap: 12px 20px;
|
||||
padding: 17px 0 28px;
|
||||
border-top: 1px solid var(--line);
|
||||
color: var(--muted);
|
||||
font-size: 11px;
|
||||
}
|
||||
|
||||
.site-footer nav {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 5px 16px;
|
||||
}
|
||||
|
||||
@media (max-width: 1000px) {
|
||||
.docs-layout {
|
||||
grid-template-columns: 220px minmax(0, 1fr);
|
||||
gap: 26px;
|
||||
}
|
||||
|
||||
.site-nav > a,
|
||||
.support-menu > summary {
|
||||
padding-inline: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 760px) {
|
||||
.site-header,
|
||||
.docs-layout,
|
||||
.site-footer {
|
||||
width: calc(100% - 30px);
|
||||
}
|
||||
|
||||
.site-header {
|
||||
padding-top: 18px;
|
||||
}
|
||||
|
||||
.brand strong {
|
||||
font-size: 25px;
|
||||
}
|
||||
|
||||
.brand img {
|
||||
width: 32px;
|
||||
height: 36px;
|
||||
}
|
||||
|
||||
.appearance > span {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.site-nav > a,
|
||||
.support-menu > summary {
|
||||
min-height: 38px;
|
||||
padding: 7px 9px;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.docs-layout {
|
||||
display: block;
|
||||
padding-top: 18px;
|
||||
}
|
||||
|
||||
.docs-sidebar {
|
||||
position: static;
|
||||
max-height: none;
|
||||
margin-bottom: 23px;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
.docs-navigation {
|
||||
padding: 7px 12px;
|
||||
border: 1px solid var(--line);
|
||||
background: var(--panel);
|
||||
}
|
||||
|
||||
.docs-navigation > summary {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.sidebar-content {
|
||||
padding-top: 12px;
|
||||
}
|
||||
|
||||
.docs-sidebar ul {
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
.docs-sidebar .sidebar-content {
|
||||
max-height: 60vh;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 26px;
|
||||
}
|
||||
|
||||
.docs-version {
|
||||
font-size: 10px;
|
||||
}
|
||||
|
||||
.support-links {
|
||||
right: 0;
|
||||
min-width: 210px;
|
||||
}
|
||||
|
||||
.docs-content table {
|
||||
display: block;
|
||||
max-width: 100%;
|
||||
overflow-x: auto;
|
||||
}
|
||||
}
|
||||
|
||||
@media print {
|
||||
.site-header,
|
||||
.docs-sidebar,
|
||||
.site-footer,
|
||||
.page-relations,
|
||||
a.headerlink {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.docs-layout,
|
||||
.docs-layout.no-sidebar {
|
||||
display: block;
|
||||
width: 100%;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.docs-content,
|
||||
.docs-content * {
|
||||
color: #000000 !important;
|
||||
background: #ffffff !important;
|
||||
}
|
||||
|
||||
.docs-content .highlight,
|
||||
.docs-content .literal-block {
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
.docs-content pre {
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
|
||||
.docs-content .highlight span {
|
||||
color: #000000 !important;
|
||||
}
|
||||
}
|
||||
|
||||
/* The shared site stylesheet owns the page shell and primary navigation. */
|
||||
:root {
|
||||
--page: var(--bg);
|
||||
--panel: var(--chrome);
|
||||
--font: system-ui, -apple-system, "Segoe UI", "DejaVu Sans", sans-serif;
|
||||
}
|
||||
.site-header { padding: 0; }
|
||||
.appearance select { min-height: 0; border-radius: 3px; }
|
||||
.docs-layout {
|
||||
width: min(1040px, calc(100% - 48px));
|
||||
grid-template-columns: minmax(0, 1fr) 220px;
|
||||
gap: 40px;
|
||||
padding-block: 28px 20px;
|
||||
}
|
||||
.docs-content { grid-column: 1; grid-row: 1; }
|
||||
.docs-sidebar {
|
||||
grid-column: 2;
|
||||
grid-row: 1;
|
||||
padding: 3px 0 0;
|
||||
border: 0;
|
||||
}
|
||||
.site-footer { display: block; }
|
||||
.site-footer .footer-links { gap: 5px 14px; }
|
||||
.docs-location { width: 100%; margin-top: 0; margin-bottom: 20px; }
|
||||
@media (max-width: 800px) {
|
||||
.docs-layout { grid-template-columns: minmax(0, 1fr) 185px; gap: 26px; }
|
||||
}
|
||||
@media (max-width: 760px) {
|
||||
.docs-layout { display: block; }
|
||||
}
|
||||
@media (max-width: 600px) {
|
||||
.docs-layout { width: calc(100% - 30px); padding-top: 23px; }
|
||||
}
|
||||
@media print {
|
||||
.docs-layout, .docs-layout.no-sidebar { width: 100%; padding: 0; }
|
||||
}
|
||||
|
||||
.site-footer, .footer-grid { font-size: inherit; color: inherit; }
|
||||
@@ -0,0 +1,526 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
/* Shared chrome copied from ZoiteChat/site assets/css/site.css (1df996a). */
|
||||
:root {
|
||||
color-scheme: light;
|
||||
--bg: #fff;
|
||||
--surface: #fff;
|
||||
--chrome: #f1f2f3;
|
||||
--chrome2: #e3e5e7;
|
||||
--text: #25282c;
|
||||
--muted: #58616b;
|
||||
--line: #bdc3c9;
|
||||
--soft-line: #dce0e4;
|
||||
--blue: #215a9e;
|
||||
--link: #174f92;
|
||||
--selection: #e6effa;
|
||||
--success: #236741;
|
||||
--code: #f2f4f6;
|
||||
--shadow: none;
|
||||
--mono: Consolas,"DejaVu Sans Mono","Liberation Mono",monospace;
|
||||
}
|
||||
|
||||
html[data-theme=dark] {
|
||||
color-scheme: dark;
|
||||
--bg: #111416;
|
||||
--surface: #191c1f;
|
||||
--chrome: #25292d;
|
||||
--chrome2: #30353a;
|
||||
--text: #eef0f2;
|
||||
--muted: #b2bbc4;
|
||||
--line: #50575e;
|
||||
--soft-line: #353c43;
|
||||
--blue: #2865a8;
|
||||
--link: #8dc0ff;
|
||||
--selection: #233951;
|
||||
--success: #92d5ab;
|
||||
--code: #111518;
|
||||
--shadow: none;
|
||||
}
|
||||
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
background: var(--bg);
|
||||
color: var(--text);
|
||||
font: 15px/1.6 system-ui,-apple-system,"Segoe UI","DejaVu Sans",sans-serif;
|
||||
}
|
||||
|
||||
a {
|
||||
color: var(--link);
|
||||
text-underline-offset: 3px;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
button, input, select {
|
||||
font: inherit;
|
||||
}
|
||||
|
||||
button, summary {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
img {
|
||||
display: block;
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
button, a, input, select, summary {
|
||||
touch-action: manipulation;
|
||||
}
|
||||
|
||||
:focus-visible {
|
||||
outline: 3px solid var(--link);
|
||||
outline-offset: 3px;
|
||||
}
|
||||
|
||||
[hidden] {
|
||||
display: none!important;
|
||||
}
|
||||
|
||||
.sr-only {
|
||||
position: absolute;
|
||||
width: 1px;
|
||||
height: 1px;
|
||||
padding: 0;
|
||||
margin: -1px;
|
||||
overflow: hidden;
|
||||
clip-path: inset(50%);
|
||||
white-space: nowrap;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
.skip-link {
|
||||
position: absolute;
|
||||
left: 12px;
|
||||
top: -100px;
|
||||
z-index: 10;
|
||||
padding: 10px;
|
||||
background: var(--surface);
|
||||
}
|
||||
|
||||
.skip-link:focus {
|
||||
top: 12px;
|
||||
}
|
||||
|
||||
.topbar {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
gap: 20px;
|
||||
padding: 0 0 16px;
|
||||
background: var(--surface);
|
||||
border-bottom: 1px solid var(--line);
|
||||
border: 0;
|
||||
}
|
||||
|
||||
.brand {
|
||||
display: flex;
|
||||
gap: 12px;
|
||||
align-items: center;
|
||||
color: var(--text);
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.brand img {
|
||||
width: 38px;
|
||||
height: 42px;
|
||||
}
|
||||
|
||||
.brand strong {
|
||||
font-size: 28px;
|
||||
letter-spacing: -.8px;
|
||||
font-weight: 650;
|
||||
}
|
||||
|
||||
.brand small {
|
||||
display: block;
|
||||
font-size: 12px;
|
||||
color: var(--muted);
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
||||
.appearance {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
font-size: 11px;
|
||||
color: var(--muted);
|
||||
}
|
||||
|
||||
select {
|
||||
border: 1px solid var(--line);
|
||||
border-radius: 3px;
|
||||
padding: 5px 8px;
|
||||
background: var(--surface);
|
||||
color: var(--text);
|
||||
}
|
||||
|
||||
.navigation {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: flex-start;
|
||||
gap: 12px;
|
||||
background: var(--chrome);
|
||||
border-bottom: 1px solid var(--line);
|
||||
padding: 0;
|
||||
border: 1px solid var(--line);
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
.nav-links {
|
||||
display: flex;
|
||||
align-items: stretch;
|
||||
flex-wrap: wrap;
|
||||
gap: 0;
|
||||
}
|
||||
|
||||
.nav-links>a, .nav-menu summary {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
min-height: 36px;
|
||||
padding: 6px 15px;
|
||||
color: var(--text);
|
||||
font-size: 13px;
|
||||
text-decoration: none;
|
||||
border-bottom: 0;
|
||||
}
|
||||
|
||||
.nav-links>a[aria-current=page] {
|
||||
color: #fff;
|
||||
border-bottom-color: var(--blue);
|
||||
font-weight: 500;
|
||||
background: var(--blue);
|
||||
}
|
||||
|
||||
.nav-links>a:hover, .nav-menu summary:hover {
|
||||
background: var(--selection);
|
||||
}
|
||||
|
||||
.nav-menu {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.nav-menu summary {
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
.nav-menu summary::after {
|
||||
content: "⌄";
|
||||
margin-left: 9px;
|
||||
}
|
||||
|
||||
.nav-menu summary::-webkit-details-marker {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.nav-menu-panel {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 100%;
|
||||
z-index: 5;
|
||||
min-width: 280px;
|
||||
background: var(--surface);
|
||||
border: 1px solid var(--line);
|
||||
box-shadow: var(--shadow);
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
.nav-menu-panel a {
|
||||
display: block;
|
||||
padding: 10px 12px;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.nav-menu-panel a:hover {
|
||||
background: var(--selection);
|
||||
}
|
||||
|
||||
.nav-menu-panel span {
|
||||
display: block;
|
||||
font-size: 12px;
|
||||
color: var(--muted);
|
||||
}
|
||||
|
||||
.site-main {
|
||||
min-height: 0;
|
||||
}
|
||||
|
||||
h1, h2, h3, p {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: clamp(30px,3.9vw,46px);
|
||||
line-height: 1.16;
|
||||
letter-spacing: -1.5px;
|
||||
font-weight: 650;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 20px;
|
||||
line-height: 1.3;
|
||||
letter-spacing: 0;
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 16px;
|
||||
line-height: 1.4;
|
||||
}
|
||||
|
||||
p {
|
||||
color: var(--text);
|
||||
font-size: 14px;
|
||||
line-height: 1.7;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.site-footer {
|
||||
padding: 17px 0;
|
||||
background: var(--surface);
|
||||
border-top: 1px solid var(--line);
|
||||
}
|
||||
|
||||
.footer-grid {
|
||||
display: flex;
|
||||
align-items: start;
|
||||
justify-content: space-between;
|
||||
gap: 20px;
|
||||
}
|
||||
|
||||
.footer-copy {
|
||||
font-size: 11px;
|
||||
max-width: 62ch;
|
||||
margin: 0;
|
||||
color: var(--muted);
|
||||
}
|
||||
|
||||
.footer-links {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 5px 14px;
|
||||
max-width: 400px;
|
||||
font-size: 11px;
|
||||
}
|
||||
|
||||
@media (max-width:1000px) {
|
||||
.navigation {
|
||||
padding: 0 15px;
|
||||
}
|
||||
|
||||
.nav-links>a, .nav-menu summary {
|
||||
padding: 8px 10px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width:650px) {
|
||||
.topbar {
|
||||
padding: 13px 16px;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.brand strong {
|
||||
font-size: 20px;
|
||||
}
|
||||
|
||||
.brand small {
|
||||
font-size: 10px;
|
||||
}
|
||||
|
||||
.brand img {
|
||||
width: 28px;
|
||||
height: 31px;
|
||||
}
|
||||
|
||||
.appearance {
|
||||
gap: 5px;
|
||||
}
|
||||
|
||||
.appearance>span {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.appearance select {
|
||||
font-size: 12px;
|
||||
max-width: 98px;
|
||||
}
|
||||
|
||||
.navigation {
|
||||
padding: 0 6px;
|
||||
}
|
||||
|
||||
.nav-links {
|
||||
gap: 0;
|
||||
}
|
||||
|
||||
.nav-links>a, .nav-menu summary {
|
||||
min-height: 44px;
|
||||
padding: 8px;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 34px;
|
||||
letter-spacing: -1px;
|
||||
}
|
||||
|
||||
.footer-grid {
|
||||
display: grid;
|
||||
gap: 20px;
|
||||
}
|
||||
|
||||
.site-footer {
|
||||
padding: 20px 17px;
|
||||
}
|
||||
|
||||
.nav-menu-panel {
|
||||
position: fixed;
|
||||
right: 10px;
|
||||
left: 10px;
|
||||
top: auto;
|
||||
min-width: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@media (prefers-reduced-motion:reduce) {
|
||||
* {
|
||||
scroll-behavior: auto!important;
|
||||
}
|
||||
}
|
||||
|
||||
.appearance select {
|
||||
font-size: 12px;
|
||||
padding: 3px 7px;
|
||||
}
|
||||
|
||||
.nav-links>a:hover {
|
||||
background: var(--selection);
|
||||
color: var(--link);
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 28px;
|
||||
font-weight: 600;
|
||||
letter-spacing: -.5px;
|
||||
line-height: 1.3;
|
||||
margin: 0 0 16px;
|
||||
max-width: none;
|
||||
}
|
||||
|
||||
@media (max-width:1100px) {
|
||||
.navigation {
|
||||
padding: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width:800px) {
|
||||
.nav-links>a, .nav-menu summary {
|
||||
padding: 6px 10px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width:600px) {
|
||||
.topbar {
|
||||
padding: 0 0 14px;
|
||||
}
|
||||
|
||||
.brand strong {
|
||||
font-size: 25px;
|
||||
}
|
||||
|
||||
.brand img {
|
||||
width: 32px;
|
||||
height: 36px;
|
||||
}
|
||||
|
||||
.nav-links>a, .nav-menu summary {
|
||||
padding: 7px 9px;
|
||||
min-height: 38px;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.footer-grid {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.footer-links {
|
||||
margin-top: 10px;
|
||||
max-width: none;
|
||||
}
|
||||
|
||||
.site-footer {
|
||||
padding: 14px 0;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 26px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
:root:not([data-theme]) {
|
||||
color-scheme: dark;
|
||||
--bg: #111416;
|
||||
--surface: #191c1f;
|
||||
--chrome: #25292d;
|
||||
--chrome2: #30353a;
|
||||
--text: #eef0f2;
|
||||
--muted: #b2bbc4;
|
||||
--line: #50575e;
|
||||
--soft-line: #353c43;
|
||||
--blue: #2865a8;
|
||||
--link: #8dc0ff;
|
||||
--selection: #233951;
|
||||
--success: #92d5ab;
|
||||
--code: #111518;
|
||||
--shadow: none;
|
||||
}
|
||||
}
|
||||
|
||||
.site-header, .site-main, .site-footer {
|
||||
width: min(1040px, calc(100% - 48px));
|
||||
margin-inline: auto;
|
||||
}
|
||||
|
||||
.site-header {
|
||||
margin-top: 32px;
|
||||
}
|
||||
|
||||
.site-main {
|
||||
padding-block: 28px 20px;
|
||||
}
|
||||
|
||||
.site-header .topbar {
|
||||
padding: 0 0 16px;
|
||||
}
|
||||
|
||||
.site-header .navigation {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
@media (max-width: 600px) {
|
||||
.site-header, .site-main, .site-footer {
|
||||
width: calc(100% - 30px);
|
||||
}
|
||||
|
||||
.site-header {
|
||||
margin-top: 18px;
|
||||
}
|
||||
|
||||
.site-main {
|
||||
padding-top: 23px;
|
||||
}
|
||||
}
|
||||
|
||||
/* Match the browser's heading defaults used by the main site. */
|
||||
h2, h3 { font-weight: bold; }
|
||||
h2 { margin-top: .83em; }
|
||||
h3 { margin-block: 1em; }
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 5.0 KiB |
|
After Width: | Height: | Size: 74 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 9.3 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 38 KiB |
|
After Width: | Height: | Size: 36 KiB |
|
After Width: | Height: | Size: 45 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 83 KiB |
|
After Width: | Height: | Size: 2.2 KiB |
|
After Width: | Height: | Size: 50 KiB |
@@ -0,0 +1,44 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
(() => {
|
||||
'use strict';
|
||||
|
||||
const initialise = () => {
|
||||
const picker = document.getElementById('theme-picker');
|
||||
const preference = window.matchMedia('(prefers-color-scheme: dark)');
|
||||
|
||||
if (picker instanceof HTMLSelectElement) {
|
||||
const applyTheme = () => {
|
||||
const dark = picker.value === 'dark'
|
||||
|| (picker.value === 'system' && preference.matches);
|
||||
document.documentElement.dataset.theme = dark ? 'dark' : 'light';
|
||||
document.querySelectorAll('meta[name="theme-color"]').forEach((meta) => {
|
||||
meta.setAttribute('content', dark ? '#111416' : '#ffffff');
|
||||
});
|
||||
};
|
||||
|
||||
// Follow the OS on every visit, including browser back/forward navigation.
|
||||
const resetTheme = () => {
|
||||
picker.value = 'system';
|
||||
applyTheme();
|
||||
};
|
||||
picker.addEventListener('change', applyTheme);
|
||||
preference.addEventListener('change', applyTheme);
|
||||
window.addEventListener('pageshow', resetTheme);
|
||||
resetTheme();
|
||||
}
|
||||
|
||||
const navigation = document.getElementById('docs-navigation');
|
||||
const compact = window.matchMedia('(max-width: 760px)');
|
||||
if (navigation instanceof HTMLDetailsElement) {
|
||||
const fitNavigation = () => { navigation.open = !compact.matches; };
|
||||
compact.addEventListener('change', fitNavigation);
|
||||
fitNavigation();
|
||||
}
|
||||
};
|
||||
|
||||
if (document.readyState === 'loading') {
|
||||
document.addEventListener('DOMContentLoaded', initialise, { once: true });
|
||||
} else {
|
||||
initialise();
|
||||
}
|
||||
})();
|
||||
@@ -0,0 +1,56 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 908.34 1000">
|
||||
<defs>
|
||||
<style>
|
||||
.cls-1 {
|
||||
fill: url(#linear-gradient-2);
|
||||
}
|
||||
|
||||
.cls-2 {
|
||||
fill: #fff;
|
||||
}
|
||||
|
||||
.cls-3 {
|
||||
isolation: isolate;
|
||||
}
|
||||
|
||||
.cls-4 {
|
||||
opacity: .3;
|
||||
}
|
||||
|
||||
.cls-5 {
|
||||
mix-blend-mode: multiply;
|
||||
opacity: .5;
|
||||
}
|
||||
|
||||
.cls-6 {
|
||||
fill: url(#linear-gradient);
|
||||
}
|
||||
</style>
|
||||
<linearGradient id="linear-gradient" x1="14.94" y1="500" x2="893.4" y2="500" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0" stop-color="#01a1fb"/>
|
||||
<stop offset="1" stop-color="#0047bc"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="linear-gradient-2" x1="14.94" y1="533.09" x2="823" y2="533.09" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0" stop-color="#0047bc"/>
|
||||
<stop offset="1" stop-color="#01a1fb"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g class="cls-3">
|
||||
<g id="Layer_1" data-name="Layer 1">
|
||||
<g>
|
||||
<g>
|
||||
<path class="cls-6" d="m209.4,878.26c7.44-16.01,13.21-32.36,17.4-48.87C99.81,752.4,14.94,612.88,14.94,453.52c0-242.58,196.65-439.23,439.23-439.23,242.58,0,439.23,196.65,439.23,439.23,0,242.58-196.65,439.23-439.23,439.23-33.13,0-65.4-3.69-96.43-10.65-57.19,71.24-145.98,109.28-235.84,102.91,36.55-26.73,67.06-62.8,87.5-106.76Z"/>
|
||||
<path class="cls-1" d="m209.4,878.26c7.41-15.92,13.14-32.19,17.33-48.6C99.79,752.82,14.94,613.44,14.94,454.23c0-158.08,83.65-296.6,209.09-373.76-43.67,68.18-68.99,149.24-68.99,236.21,0,242.19,196.33,438.52,438.52,438.52,84.11,0,162.68-23.7,229.43-64.76-77.94,121.67-214.32,202.31-369.53,202.31-32.92,0-64.98-3.65-95.82-10.53-57.19,71.17-145.94,109.16-235.75,102.79,36.55-26.73,67.06-62.8,87.5-106.76Z"/>
|
||||
<g class="cls-4">
|
||||
<path class="cls-2" d="m815.15,496.56c0-214.21-173.66-387.87-387.87-387.87-125.21,0-236.54,59.35-307.46,151.43,66.98-116.27,192.51-194.55,336.33-194.55,214.22,0,387.87,173.66,387.87,387.87,0,89-30,170.99-80.41,236.44,32.78-56.91,51.54-122.92,51.54-193.32Z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<image class="cls-5" width="316" height="274" transform="translate(209.32 236.76) scale(1.59)" xlink:href="data:image/png;base64,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 truncated
|
||||
<path class="cls-2" d="m683.68,250.22h-421.95l-38.92,93.77h249.4l-249.4,300.48h422.01l38.86-93.84h-249.33l249.33-300.42Z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 12 KiB |
@@ -0,0 +1,5 @@
|
||||
{# SPDX-License-Identifier: GPL-2.0-or-later #}
|
||||
<nav class="global-toc" aria-label="{{ _('Documentation contents') }}">
|
||||
<h2>{{ _('Contents') }}</h2>
|
||||
{{ toctree(maxdepth=2, collapse=true, includehidden=true, titles_only=true) }}
|
||||
</nav>
|
||||
@@ -0,0 +1,108 @@
|
||||
{# SPDX-License-Identifier: GPL-2.0-or-later #}
|
||||
{% extends "basic/layout.html" %}
|
||||
{% set docs_root = root_doc|default(master_doc) %}
|
||||
|
||||
{% block extrahead %}
|
||||
{{ super() }}
|
||||
<meta name="theme-color" content="#ffffff" media="(prefers-color-scheme: light)">
|
||||
<meta name="theme-color" content="#111416" media="(prefers-color-scheme: dark)">
|
||||
{% endblock %}
|
||||
|
||||
{% block body_tag %}<body id="top">{% endblock %}
|
||||
|
||||
{% block header %}
|
||||
<a class="skip-link" href="#main-content">{{ _('Skip to content') }}</a>
|
||||
<header class="site-header">
|
||||
<div class="topbar">
|
||||
<a class="brand" href="{{ pathto(docs_root)|e }}">
|
||||
<img src="{{ logo_url|default(pathto('_static/zoitechat-logo.svg', 1), true)|e }}" alt="" width="38" height="42">
|
||||
<strong>{{ project|e }}</strong>
|
||||
</a>
|
||||
<label class="appearance" for="theme-picker">
|
||||
<span>{{ _('Appearance') }}</span>
|
||||
<select id="theme-picker" aria-label="{{ _('Documentation appearance') }}">
|
||||
<option value="system" selected>{{ _('System') }}</option>
|
||||
<option value="light">{{ _('Light') }}</option>
|
||||
<option value="dark">{{ _('Dark') }}</option>
|
||||
</select>
|
||||
</label>
|
||||
</div>
|
||||
<div class="navigation">
|
||||
<nav class="nav-links" aria-label="{{ _('Primary') }}">
|
||||
<a href="{{ zoite_site_url|e }}">{{ _('Home') }}</a>
|
||||
<a href="{{ zoite_download_url|e }}">{{ _('Downloads') }}</a>
|
||||
<a href="{{ zoite_addons_url|e }}">{{ _('Addons') }}</a>
|
||||
<a href="{{ zoite_announcements_url|e }}">{{ _('Announcements') }}</a>
|
||||
<a href="{{ pathto(docs_root)|e }}" aria-current="page">{{ _('Documentation') }}</a>
|
||||
<a href="{{ zoite_atlas_url|e }}">{{ _('Atlas') }}</a>
|
||||
<a href="{{ zoite_github_url|e }}" target="_blank" rel="noopener">{{ _('GitHub') }}</a>
|
||||
<details class="nav-menu">
|
||||
<summary>{{ _('IRC support') }}</summary>
|
||||
<div class="nav-menu-panel" aria-label="{{ _('IRC support channels') }}">
|
||||
<a href="{{ zoite_irc_url|e }}" target="_blank" rel="noopener"><strong>{{ _('Zoite IRC') }}</strong><span>{{ _('Official support') }} · #zoitechat</span></a>
|
||||
<a href="{{ libera_irc_url|e }}" target="_blank" rel="noopener"><strong>{{ _('Libera.Chat') }}</strong><span>{{ _('Secondary support') }} · #zoitechat</span></a>
|
||||
</div>
|
||||
</details>
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
{% endblock %}
|
||||
|
||||
{% block relbar1 %}{% endblock %}
|
||||
{% block relbar2 %}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="docs-layout{% if not render_sidebar %} no-sidebar{% endif %}">
|
||||
{% if render_sidebar %}
|
||||
<aside class="docs-sidebar" aria-label="{{ _('Documentation navigation') }}">
|
||||
<details class="docs-navigation" id="docs-navigation" open>
|
||||
<summary>{{ _('Documentation') }}</summary>
|
||||
<div class="sidebar-content">
|
||||
{% for sidebartemplate in sidebars %}
|
||||
{% include sidebartemplate %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
</details>
|
||||
</aside>
|
||||
{% endif %}
|
||||
<main class="docs-content" id="main-content" tabindex="-1">
|
||||
<div class="docs-location">
|
||||
<nav aria-label="{{ _('Breadcrumbs') }}">
|
||||
<a href="{{ pathto(docs_root)|e }}">{{ _('Documentation') }}</a>
|
||||
{% for parent in parents %}
|
||||
<span aria-hidden="true">/</span> <a href="{{ parent.link|e }}">{{ parent.title }}</a>
|
||||
{% endfor %}
|
||||
{% if pagename != docs_root %}<span aria-hidden="true">/</span> <span>{{ title|striptags|e }}</span>{% endif %}
|
||||
</nav>
|
||||
<span class="docs-version">{{ release|e }}</span>
|
||||
</div>
|
||||
|
||||
{% block body %}{% endblock %}
|
||||
{% if prev or next %}
|
||||
<nav class="page-relations" aria-label="{{ _('Related pages') }}">
|
||||
<div>
|
||||
{% if prev %}<small>{{ _('Previous') }}</small><a href="{{ prev.link|e }}" rel="prev">{{ prev.title }}</a>{% endif %}
|
||||
</div>
|
||||
<div>
|
||||
{% if next %}<small>{{ _('Next') }}</small><a href="{{ next.link|e }}" rel="next">{{ next.title }}</a>{% endif %}
|
||||
</div>
|
||||
</nav>
|
||||
{% endif %}
|
||||
</main>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block footer %}
|
||||
<footer class="site-footer">
|
||||
<div class="footer-grid">
|
||||
<p class="footer-copy">{{ project|e }} {{ _('documentation') }} · {{ release|e }}</p>
|
||||
<nav class="footer-links" aria-label="{{ _('Footer navigation') }}">
|
||||
<a href="{{ pathto(docs_root)|e }}">{{ _('Contents') }}</a>
|
||||
<a href="{{ zoite_atlas_url|e }}">{{ _('Atlas') }}</a>
|
||||
{% if hasdoc('search') %}<a href="{{ pathto('search')|e }}">{{ _('Search') }}</a>{% endif %}
|
||||
{% if hasdoc('genindex') %}<a href="{{ pathto('genindex')|e }}">{{ _('Index') }}</a>{% endif %}
|
||||
<a href="#top">{{ _('Back to top') }}</a>
|
||||
</nav>
|
||||
</div>
|
||||
</footer>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,7 @@
|
||||
{# SPDX-License-Identifier: GPL-2.0-or-later #}
|
||||
{% if display_toc %}
|
||||
<nav class="local-toc" aria-label="{{ _('On this page') }}">
|
||||
<h2>{{ _('On this page') }}</h2>
|
||||
{{ toc }}
|
||||
</nav>
|
||||
{% endif %}
|
||||
@@ -0,0 +1,10 @@
|
||||
{# SPDX-License-Identifier: GPL-2.0-or-later #}
|
||||
{% if pagename != "search" %}
|
||||
<form class="docs-search" action="{{ pathto('search')|e }}" method="get" role="search">
|
||||
<label for="docs-search-input">{{ _('Search documentation') }}</label>
|
||||
<div class="search-inputs">
|
||||
<input id="docs-search-input" type="search" name="q" placeholder="{{ _('Search documentation') }}" autocomplete="off" spellcheck="false">
|
||||
<button type="submit">{{ _('Search') }}</button>
|
||||
</div>
|
||||
</form>
|
||||
{% endif %}
|
||||
@@ -0,0 +1,7 @@
|
||||
[theme]
|
||||
inherit = basic
|
||||
stylesheet = basic.css
|
||||
pygments_style = sphinx
|
||||
sidebars = searchbox.html, globaltoc.html, localtoc.html, sourcelink.html
|
||||
|
||||
[options]
|
||||
@@ -0,0 +1,65 @@
|
||||
Addons
|
||||
======
|
||||
|
||||
ZoiteChat ships with a handful of useful plugins that extend the functionality of the client. In order to auto-load custom ones you just place them in an :file:`addons` subdir within your `config folder <settings.html#config-files>`_, manually with :command:`/load` and :command:`/unload`, or with :menuselection:`Window --> Plugins and Scripts`.
|
||||
|
||||
With the included scripting interfaces you can also use easier to create but equally powerful scripts in languages such as Python. These are loaded/unloaded in the same manner as plugins.
|
||||
|
||||
A directory of existing ZoiteChat addons can be found at `https://zoitechat.org/addons.php <https://zoitechat.org/addons.php>`_. In addition, since ZoiteChat is based on HexChat, most HexChat and many X-Chat 2 scripts and addons are compatible too, as long as they are written in a `supported scripting language <developers.html>`_.
|
||||
|
||||
|
||||
Exec
|
||||
----
|
||||
|
||||
The exec plugin provides the :command:`/exec` command for Windows. On Unix platforms there are built-in commands for this and this documentation does not apply to the behavior of those, see :command:`/help` for more information.
|
||||
|
||||
With Exec you can perform commands as if you ran them in the command line. The output will be printed at once, in the end of execution. If the command takes more than 10 seconds to complete, it gets aborted to avoid locking down ZoiteChat. Usage:
|
||||
|
||||
:command:`/exec ping google.com`
|
||||
|
||||
|
||||
FISHLiM
|
||||
-------
|
||||
|
||||
Adds FiSH encryption support. You set a password for a conversation/channel, and then all your messages get encrypted. Only those who know the password will be able to read your messages. Usage is simple: first you set the password:
|
||||
|
||||
:command:`/setkey yoursecretkey`
|
||||
|
||||
Then you let your fellow chatters know this password. Once they also set the password on their sides, they'll receive messages decrypted and send them encrypted, too.
|
||||
|
||||
You can remove the key with:
|
||||
|
||||
:command:`/delkey #channel`
|
||||
|
||||
Update Checker
|
||||
--------------
|
||||
|
||||
Windows only. Automatically checks for available updates. Can also be manually checked via :menuselection:`Help --> Check for Updates` or by the command:
|
||||
|
||||
:command:`/updchk`
|
||||
|
||||
|
||||
Sysinfo
|
||||
-------
|
||||
|
||||
Prints out basic system information on both Windows and Unix. You can either activate in :menuselection:`Window --> Display System Info` or type:
|
||||
|
||||
:command:`/sysinfo`
|
||||
|
||||
|
||||
Checksum
|
||||
--------
|
||||
|
||||
Automatically calculates the SHA-256 checksum of files sent and recieved via DCC.
|
||||
|
||||
|
||||
Winamp
|
||||
------
|
||||
|
||||
Displays your currently playing song via :menuselection:`Window --> Display Current Song` or by command:
|
||||
|
||||
:command:`/winamp`
|
||||
|
||||
.. note::
|
||||
- Windows-only and untested, but may work
|
||||
- Foobar2000 can also be used with the `foo_winamp_spam <https://github.com/RazielZ/foo_winamp_spam>`_ plugin.
|
||||