Compare commits
751 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
953fdbb6bc | ||
|
|
8784cb9df8 | ||
|
|
22f37074b1 | ||
|
|
90d79b236f | ||
|
|
fe15024384 | ||
|
|
46d9f8ab1c | ||
|
|
75bbe5ab5a | ||
|
|
22fc256d8a | ||
|
|
01a1cb2dce | ||
|
|
b4fd362333 | ||
|
|
ccc7cd0453 | ||
|
|
b67756c152 | ||
|
|
3b9403a329 | ||
|
|
c44e92dcc8 | ||
|
|
14d1c37df5 | ||
|
|
78b3df4019 | ||
|
|
9acb32aaeb | ||
|
|
50070997de | ||
|
|
88f0ab1dea | ||
|
|
038285cbe6 | ||
|
|
295a587df5 | ||
|
|
73d7d78080 | ||
|
|
cd367a8649 | ||
|
|
f637771527 | ||
|
|
7b01c33657 | ||
|
|
af1cd30ed7 | ||
|
|
508384c016 | ||
|
|
3446484d97 | ||
|
|
bed533eaeb | ||
|
|
31f8435511 | ||
|
|
6bcd143362 | ||
|
|
e5f2a1b0e5 | ||
|
|
66a191b018 | ||
|
|
e619946b9c | ||
|
|
6d7ae5d830 | ||
|
|
2de59b0c9b | ||
|
|
9ac37d6fb3 | ||
|
|
fb9568a628 | ||
|
|
90590faaaf | ||
|
|
bee04fb2b0 | ||
|
|
b3e2dcf2c5 | ||
|
|
d4d9fc3405 | ||
|
|
6a75061dbb | ||
|
|
2e7c80422c | ||
|
|
60f800b671 | ||
|
|
1ba6983f39 | ||
|
|
6c61ff59ff | ||
|
|
6464987437 | ||
|
|
41027f7019 | ||
|
|
41c8e1a538 | ||
|
|
56756c5c85 | ||
|
|
3b68fe467d | ||
|
|
f14aacd664 | ||
|
|
c2ceb9ec73 | ||
|
|
99a950b049 | ||
|
|
87914a267a | ||
|
|
dd85aba8a9 | ||
|
|
8309be9ca9 | ||
|
|
5fbc86afa3 | ||
|
|
be5889ee33 | ||
|
|
7c342032de | ||
|
|
46baad899c | ||
|
|
66f15f532f | ||
|
|
89522e2059 | ||
|
|
0cac46ee26 | ||
|
|
1fcc26464f | ||
|
|
ad1583706a | ||
|
|
cc169db12b | ||
|
|
6a1db5d26b | ||
|
|
b04c3d878d | ||
|
|
68e302b5d7 | ||
|
|
ed39624476 | ||
|
|
8683658046 | ||
|
|
0c308a7001 | ||
|
|
cd82668435 | ||
|
|
e142cb6800 | ||
|
|
200329df4a | ||
|
|
859f14423e | ||
|
|
9d21be1048 | ||
|
|
d5293fbc72 | ||
|
|
ad6c0e0d15 | ||
|
|
ce706d4732 | ||
|
|
2c511d1a2c | ||
|
|
3ac21d95f9 | ||
|
|
b33fdf14af | ||
|
|
24769e144f | ||
|
|
50875421a5 | ||
|
|
0581d8f7d4 | ||
|
|
be9f39d043 | ||
|
|
034482362d | ||
|
|
1a45b5cb4a | ||
|
|
fab34df973 | ||
|
|
dbb865d723 | ||
|
|
23db485183 | ||
|
|
d63116542b | ||
|
|
f5dbfcec79 | ||
|
|
b7b40c557e | ||
|
|
d0373da5ca | ||
|
|
31aeab3516 | ||
|
|
4228f918d7 | ||
|
|
0f07dccc4b | ||
|
|
9b0c9e9276 | ||
|
|
ac9631462a | ||
|
|
d5bf3487f8 | ||
|
|
9259e84d5c | ||
|
|
583092735f | ||
|
|
d41f69e95e | ||
|
|
c4847caa27 | ||
|
|
cdd9289e6d | ||
|
|
cd1fdd42d3 | ||
|
|
74ed06157a | ||
|
|
293f046b35 | ||
|
|
b00b9e2816 | ||
|
|
68e9afd72b | ||
|
|
09c73d3c87 | ||
|
|
a91a90b7da | ||
|
|
d434f54ddf | ||
|
|
dbbdb61e34 | ||
|
|
d85dd864fe | ||
|
|
84bbbd19fa | ||
|
|
3f34d1a251 | ||
|
|
7b6d8bef99 | ||
|
|
a2b54e50d0 | ||
|
|
887c3525a2 | ||
|
|
3a46ce2429 | ||
|
|
c0b5876d5b | ||
|
|
74c389be8b | ||
|
|
5d87361693 | ||
|
|
9752ae2f33 | ||
|
|
3a9cafaf24 | ||
|
|
5937d83aa9 | ||
|
|
6feb1c15ee | ||
|
|
57c683d5d8 | ||
|
|
cd26cf6d98 | ||
|
|
c7864ff4a3 | ||
|
|
7b51b6900f | ||
|
|
11b6f241b0 | ||
|
|
88c01ffca3 | ||
|
|
9ed8b14d1b | ||
|
|
f7a2be1923 | ||
|
|
47e3a47e00 | ||
|
|
524b6bca1c | ||
|
|
80ecd35784 | ||
|
|
89fdc28150 | ||
|
|
b406a00c8d | ||
|
|
6755b7fae6 | ||
|
|
60801f9846 | ||
|
|
fae0cfe800 | ||
|
|
dccb5d4bf5 | ||
|
|
b9ce4bad67 | ||
|
|
baef1655d6 | ||
|
|
8fd5f353e4 | ||
|
|
326291de23 | ||
|
|
1761a9abc9 | ||
|
|
d372142d62 | ||
|
|
91f00173bb | ||
|
|
73484f1f72 | ||
|
|
490a08fa79 | ||
|
|
5b5983ed50 | ||
|
|
efc202c10f | ||
|
|
24ab7505e6 | ||
|
|
d6bce6aa63 | ||
|
|
354282930c | ||
|
|
79c9849c80 | ||
|
|
d7b4ceabbf | ||
|
|
dd5ccd11b8 | ||
|
|
26a5d00718 | ||
|
|
d32456fae0 | ||
|
|
bffdfae1f6 | ||
|
|
44b7cced09 | ||
|
|
91936a9f44 | ||
|
|
0fb394cc36 | ||
|
|
4229024adf | ||
|
|
add633bc66 | ||
|
|
54a88fa2ff | ||
|
|
9543f3b457 | ||
|
|
e88769308e | ||
|
|
bac0769933 | ||
|
|
24f2cfa4e9 | ||
|
|
970ee679f1 | ||
|
|
db7ad269b2 | ||
|
|
2232bc009d | ||
|
|
e778f2b463 | ||
|
|
7e9618d712 | ||
|
|
62880a3769 | ||
|
|
e566a358dd | ||
|
|
1b0b966e76 | ||
|
|
dd2492e04d | ||
|
|
0b4ed25891 | ||
|
|
372c677e8f | ||
|
|
9a6f335e48 | ||
|
|
f9441db232 | ||
|
|
4de43faa2e | ||
|
|
ba372a101b | ||
|
|
a2ff54af70 | ||
|
|
cbc4f58323 | ||
|
|
b553e7554d | ||
|
|
68724c8a9e | ||
|
|
85baf8e0e6 | ||
|
|
222c9d01a0 | ||
|
|
db30aa8041 | ||
|
|
6f95456d20 | ||
|
|
de6e402d97 | ||
|
|
6341660788 | ||
|
|
a1dbcae93e | ||
|
|
1526137a64 | ||
|
|
3097b56816 | ||
|
|
db74eccf77 | ||
|
|
14890d342a | ||
|
|
51163dd985 | ||
|
|
f0d9b3a9a7 | ||
|
|
8f3707fbf1 | ||
|
|
f52bbe9804 | ||
|
|
3ec54868d0 | ||
|
|
c0b55f9af3 | ||
|
|
279f21857d | ||
|
|
b897103af0 | ||
|
|
353664fbd4 | ||
|
|
de3505ce07 | ||
|
|
cdc1720358 | ||
|
|
904d210ba2 | ||
|
|
db8dd85b63 | ||
|
|
8ad130567e | ||
|
|
7eb21bc5a2 | ||
|
|
ea4316a847 | ||
|
|
2bbc97a950 | ||
|
|
0178d105ba | ||
|
|
771fa75f48 | ||
|
|
82483b33fc | ||
|
|
886c53c7d8 | ||
|
|
f0050dd6e6 | ||
|
|
e6a2f65b4e | ||
|
|
2fc3f9864f | ||
|
|
64c05a1b06 | ||
|
|
7c4e20f96c | ||
|
|
ace286753c | ||
|
|
f0430eba9f | ||
|
|
bbcceb72a7 | ||
|
|
be4fa6ad2c | ||
|
|
50e1f77e10 | ||
|
|
ba56b45038 | ||
|
|
b4b3764e5f | ||
|
|
2220372e4f | ||
|
|
0957dfc66e | ||
|
|
9578f948b4 | ||
|
|
1724f0d202 | ||
|
|
2bebf200df | ||
|
|
fc7fc18b14 | ||
|
|
8f00ca5680 | ||
|
|
236b524445 | ||
|
|
ae59d257c3 | ||
|
|
662ccfcf0a | ||
|
|
b7ab3655c4 | ||
|
|
eda04b32a4 | ||
|
|
9b1ae39922 | ||
|
|
d1497115da | ||
|
|
7f2682bb7b | ||
|
|
d6579b29ae | ||
|
|
8a8aa6c1e0 | ||
|
|
ed66a4655b | ||
|
|
e04affd0fe | ||
|
|
e293083492 | ||
|
|
7f39f36c75 | ||
|
|
565819febe | ||
|
|
af150118a1 | ||
|
|
470e519a2b | ||
|
|
d73588f1fd | ||
|
|
ffbbd8e702 | ||
|
|
a1815c4cc7 | ||
|
|
b9e543f26b | ||
|
|
0788a4de2d | ||
|
|
b0c6e2f5cd | ||
|
|
9489d8a7ca | ||
|
|
aee4424dbf | ||
|
|
96f9972895 | ||
|
|
6ddf282555 | ||
|
|
e98b2b69bb | ||
|
|
448192b635 | ||
|
|
6cda3a1880 | ||
|
|
99128b2641 | ||
|
|
b8098fe067 | ||
|
|
9fef3284db | ||
|
|
f2b0a3a5ed | ||
|
|
3090cfc6f9 | ||
|
|
98ce99202e | ||
|
|
fddf46a90a | ||
|
|
a5231a55b8 | ||
|
|
b8cae015d7 | ||
|
|
3b09534320 | ||
|
|
702cf988d3 | ||
|
|
5586d12b1f | ||
|
|
4683939364 | ||
|
|
f825f87dc1 | ||
|
|
4ad422c3ea | ||
|
|
c01318c066 | ||
|
|
01a74e191a | ||
|
|
a1f15b5da5 | ||
|
|
1e83a23c5c | ||
|
|
2d69c05f33 | ||
|
|
7a2dbe68c7 | ||
|
|
db08af6ca5 | ||
|
|
fefb5c837b | ||
|
|
a88429d6d7 | ||
|
|
cbe99a32eb | ||
|
|
b65d10ac5f | ||
|
|
868f7f5055 | ||
|
|
e843684109 | ||
|
|
631197e3b9 | ||
|
|
381c385726 | ||
|
|
077255e776 | ||
|
|
0bcc1a7f12 | ||
|
|
9b145b525a | ||
|
|
b61a54bf9b | ||
|
|
cf103a09c1 | ||
|
|
a802bc1cdf | ||
|
|
8d312d8cf1 | ||
|
|
6738142ac0 | ||
|
|
3d99e6c761 | ||
|
|
f9f52e918a | ||
|
|
6108290b4b | ||
|
|
8bae275120 | ||
|
|
0504011ba0 | ||
|
|
dc9d4f9eed | ||
|
|
187c92d691 | ||
|
|
9c7b18710c | ||
|
|
1dbc54f063 | ||
|
|
348bc8b920 | ||
|
|
a375d8525f | ||
|
|
e3e423f9b1 | ||
|
|
62048992be | ||
|
|
ec9498a2ca | ||
|
|
1d35abef63 | ||
|
|
889f6d01c2 | ||
|
|
d9c47be2a9 | ||
|
|
cf44036589 | ||
|
|
7276cde48a | ||
|
|
6782bee11a | ||
|
|
b55e102dc3 | ||
|
|
65ad8a0fdc | ||
|
|
fdb3bf3edc | ||
|
|
95506ad896 | ||
|
|
348b2533dc | ||
|
|
2bdab71138 | ||
|
|
e707764f84 | ||
|
|
4a3d827f7a | ||
|
|
e88cd12dfa | ||
|
|
ee04978e0c | ||
|
|
d15ad4911d | ||
|
|
14b6c115b5 | ||
|
|
ee188da6b0 | ||
|
|
998b70cd87 | ||
|
|
7563a52bed | ||
|
|
7e81fae2bc | ||
|
|
639dfac8af | ||
|
|
d8950adb64 | ||
|
|
9092db86ca | ||
|
|
d7d9655f81 | ||
|
|
a63ca93762 | ||
|
|
243178c112 | ||
|
|
dcb3a02da8 | ||
|
|
b1c0eca328 | ||
|
|
e3a1eb5c87 | ||
|
|
736478b1c5 | ||
|
|
12919804dc | ||
|
|
888b3d8173 | ||
|
|
1e6b0f0b53 | ||
|
|
aa3e5a4737 | ||
|
|
3f3d54fd27 | ||
|
|
a142b15344 | ||
|
|
651e79ce26 | ||
|
|
9b93ce84ab | ||
|
|
dfa258b9e6 | ||
|
|
a5efca4e1f | ||
|
|
1fe84d1d34 | ||
|
|
b978ff5649 | ||
|
|
fa85ae47ac | ||
|
|
3209ecd0ba | ||
|
|
807de41ff0 | ||
|
|
d273e72a44 | ||
|
|
2c0597175d | ||
|
|
85292a3df2 | ||
|
|
9c7c6f9e4e | ||
|
|
511ff71f5f | ||
|
|
e104982246 | ||
|
|
e7e79eb62a | ||
|
|
352e314ee1 | ||
|
|
e9dafbc227 | ||
|
|
96727469ac | ||
|
|
c70c9829c0 | ||
|
|
beb7eb1aea | ||
|
|
8e726f49b2 | ||
|
|
007375371e | ||
|
|
6d79551566 | ||
|
|
483953cf56 | ||
|
|
fbf7116edf | ||
|
|
6c164d81e3 | ||
|
|
d0789734ec | ||
|
|
f3bd305337 | ||
|
|
5ab7000716 | ||
|
|
dc1c33f086 | ||
|
|
920c51100a | ||
|
|
05a385d69e | ||
|
|
9411785d26 | ||
|
|
ed2bd069ee | ||
|
|
0460030a2b | ||
|
|
7e570d11d8 | ||
|
|
32cd3209d0 | ||
|
|
0cb07aef1c | ||
|
|
0c65605ac0 | ||
|
|
8234b7ac92 | ||
|
|
4ac855d393 | ||
|
|
7381939c0f | ||
|
|
a380bcd96a | ||
|
|
d253ef468b | ||
|
|
e8145ef65a | ||
|
|
0c175abc0b | ||
|
|
946a5a1e47 | ||
|
|
29e7e0e556 | ||
|
|
cc1704a021 | ||
|
|
7ab2cf973f | ||
|
|
32386bf146 | ||
|
|
40269da391 | ||
|
|
42e082bbc6 | ||
|
|
1ad710c1cf | ||
|
|
cfa925549e | ||
|
|
ca387787b3 | ||
|
|
29a9b22c29 | ||
|
|
672375b925 | ||
|
|
c099738802 | ||
|
|
50561b8dc1 | ||
|
|
2596859778 | ||
|
|
3d453bafdb | ||
|
|
18e0b93ca7 | ||
|
|
7260a387f9 | ||
|
|
37fa165f59 | ||
|
|
8f08104f37 | ||
|
|
6ee4deab05 | ||
|
|
77fff92939 | ||
|
|
8964197b73 | ||
|
|
dbc7bcd0dd | ||
|
|
207ad2753c | ||
|
|
d6e6e52df2 | ||
|
|
9442b17d63 | ||
|
|
058ff44e39 | ||
|
|
48c7dc0eed | ||
|
|
99634a66ab | ||
|
|
21fad89cde | ||
|
|
5979ddb60c | ||
|
|
bcbfe5c849 | ||
|
|
1640732f5d | ||
|
|
9567910611 | ||
|
|
d1713504a0 | ||
|
|
bce73d9f16 | ||
|
|
6f30d2e331 | ||
|
|
556bda0d68 | ||
|
|
9d5eb55e26 | ||
|
|
110469961d | ||
|
|
fa348db7c5 | ||
|
|
3eac565b5e | ||
|
|
af40e489bc | ||
|
|
361eb4c614 | ||
|
|
7ace981f24 | ||
|
|
bfb2becb2d | ||
|
|
038f03a4e7 | ||
|
|
219228f8b5 | ||
|
|
1f64de5954 | ||
|
|
e9b5cffa91 | ||
|
|
68872f7b14 | ||
|
|
bd158619a4 | ||
|
|
310f497c30 | ||
|
|
30ee413852 | ||
|
|
0ab07a713e | ||
|
|
7eaf05839a | ||
|
|
777c3c2278 | ||
|
|
b9b54ce4f7 | ||
|
|
92e5fae29c | ||
|
|
05e8ded86a | ||
|
|
7a65b777c9 | ||
|
|
0b1f6c4d0e | ||
|
|
923af32c96 | ||
|
|
4eae7e698f | ||
|
|
5a61dbe30c | ||
|
|
036dbcaf21 | ||
|
|
bd97f9a500 | ||
|
|
33278a74b2 | ||
|
|
397f887b91 | ||
|
|
ebe793ccfc | ||
|
|
68464e4e34 | ||
|
|
395893fc7d | ||
|
|
f5657d2d4c | ||
|
|
a3ddc83430 | ||
|
|
d2f8aff421 | ||
|
|
25148509d2 | ||
|
|
2879d0dc00 | ||
|
|
90349189ee | ||
|
|
bdc524e486 | ||
|
|
cb58822009 | ||
|
|
4a2679a589 | ||
|
|
09bd1edeb3 | ||
|
|
00da3c4a0e | ||
|
|
c40d794180 | ||
|
|
34a839d9e2 | ||
|
|
f06d0605ce | ||
|
|
ef975de624 | ||
|
|
d10c737a38 | ||
|
|
28b69a06fa | ||
|
|
069cf555ea | ||
|
|
836ab311d6 | ||
|
|
dbc11c36df | ||
|
|
fffce10b31 | ||
|
|
de85e82bfa | ||
|
|
9855b35b65 | ||
|
|
5a0b045a1f | ||
|
|
c226f8f6df | ||
|
|
fd06fa9cc4 | ||
|
|
2b5f111fb1 | ||
|
|
9f5ce5ae37 | ||
|
|
3d95165d46 | ||
|
|
cfb72f27ac | ||
|
|
bcacc41db3 | ||
|
|
b2da99e334 | ||
|
|
041af37bb0 | ||
|
|
80e007bac6 | ||
|
|
87c7699324 | ||
|
|
11912c5f62 | ||
|
|
236a8b3023 | ||
|
|
63e4bac204 | ||
|
|
2e11247af4 | ||
|
|
13f377f680 | ||
|
|
b9d594bc8b | ||
|
|
2a52157c3f | ||
|
|
a037d8e793 | ||
|
|
49b7ea14c3 | ||
|
|
0a40d11133 | ||
|
|
dff6b6486d | ||
|
|
b51c646415 | ||
|
|
25acf3a9bb | ||
|
|
7ec90e9a22 | ||
|
|
645ce0b7b3 | ||
|
|
864fef5881 | ||
|
|
eea232c6db | ||
|
|
25fca498fc | ||
|
|
c9a02f9c74 | ||
|
|
99602eea95 | ||
|
|
b5fe0faeec | ||
|
|
20a36e8f9a | ||
|
|
161bf2eedb | ||
|
|
fcf4e72d8e | ||
|
|
b46cb69df4 | ||
|
|
43c7620b4c | ||
|
|
1a8f65b075 | ||
|
|
259e7080f8 | ||
|
|
7da6f05a50 | ||
|
|
521ca3ad18 | ||
|
|
31e5692dff | ||
|
|
191bcbc525 | ||
|
|
a0f3b3e442 | ||
|
|
5bcd822251 | ||
|
|
d80324655e | ||
|
|
952d168022 | ||
|
|
af723e161c | ||
|
|
3ff521e103 | ||
|
|
b4a5d985f5 | ||
|
|
1e0e2d2d6e | ||
|
|
d7f7611af4 | ||
|
|
11cdb67050 | ||
|
|
53cf9d54c4 | ||
|
|
2e73688688 | ||
|
|
ce5e85e64b | ||
|
|
02e0d34127 | ||
|
|
830f3b60e0 | ||
|
|
b4fb7d14d4 | ||
|
|
ab1e5cb62a | ||
|
|
348a9e014e | ||
|
|
0baf3fcd36 | ||
|
|
13818533a7 | ||
|
|
0dd3689d65 | ||
|
|
23b6850778 | ||
|
|
d8ca89ac8f | ||
|
|
ae06d5f7f2 | ||
|
|
62506d3eb5 | ||
|
|
f7c61d63a0 | ||
|
|
f46437f891 | ||
|
|
1cd949c365 | ||
|
|
bc5ce11449 | ||
|
|
cef4beaa0c | ||
|
|
02bd68f697 | ||
|
|
2bc3275c1f | ||
|
|
ec107063c3 | ||
|
|
4c2fd38d6c | ||
|
|
1a6653ba93 | ||
|
|
74d5e03a34 | ||
|
|
2b4b1debe6 | ||
|
|
17883eb77e | ||
|
|
3741fe54ff | ||
|
|
ec11af3827 | ||
|
|
890dc58dc3 | ||
|
|
b12bdf2eb8 | ||
|
|
59c7f8a030 | ||
|
|
50cf74ccf7 | ||
|
|
15b5c0a874 | ||
|
|
244ef22f54 | ||
|
|
b4daf5fbd8 | ||
|
|
0519ec0e4b | ||
|
|
ff4f97de1a | ||
|
|
773bdafec3 | ||
|
|
3787f99d35 | ||
|
|
2cb8331528 | ||
|
|
5b6443cfa4 | ||
|
|
6fd8212d8b | ||
|
|
0d273f6909 | ||
|
|
255e39b709 | ||
|
|
ea52dd4484 | ||
|
|
b4a46133be | ||
|
|
7c1644efc4 | ||
|
|
775e1aa97d | ||
|
|
2a55d4390a | ||
|
|
d57a34a4e1 | ||
|
|
2785248615 | ||
|
|
c42468e2c8 | ||
|
|
196ddf3f5f | ||
|
|
27302435be | ||
|
|
2b3ec77e92 | ||
|
|
b7a277a57c | ||
|
|
9c8e5b53e7 | ||
|
|
001b746f65 | ||
|
|
a78214de3c | ||
|
|
d88ffb1127 | ||
|
|
f05b901009 | ||
|
|
430837eef6 | ||
|
|
fa583ebd0f | ||
|
|
d2dcba5a59 | ||
|
|
fb5116d525 | ||
|
|
a48f6b1ca5 | ||
|
|
fc0af3f284 | ||
|
|
2288e11398 | ||
|
|
d95283c4ac | ||
|
|
4b56bd5a87 | ||
|
|
62bb605ee8 | ||
|
|
0f8da1999a | ||
|
|
21a2373a5c | ||
|
|
2ca5310825 | ||
|
|
9ccaa3072b | ||
|
|
ded78e534f | ||
|
|
9b0a43efc9 | ||
|
|
10808c2a84 | ||
|
|
38a7afd63a | ||
|
|
54b26d20fa | ||
|
|
ad2bc78ebd | ||
|
|
c4aca389a8 | ||
|
|
cb8333d4c0 | ||
|
|
2f5eed6998 | ||
|
|
935c53e452 | ||
|
|
dd0ccb327b | ||
|
|
919134759b | ||
|
|
c1d42b498a | ||
|
|
a7e67796f1 | ||
|
|
6692c9e851 | ||
|
|
ace949aaa0 | ||
|
|
fbd9687432 | ||
|
|
460a8262c1 | ||
|
|
c8de503fae | ||
|
|
a60cd51ff4 | ||
|
|
aad980ce23 | ||
|
|
e7cda7b9fa | ||
|
|
1d368b7a8b | ||
|
|
725d7055bf | ||
|
|
1fb798db4e | ||
|
|
8e1d5e0dd5 | ||
|
|
2d9a1310b9 | ||
|
|
588ec7babd | ||
|
|
2be13e7283 | ||
|
|
d5d95671ff | ||
|
|
a0eccda6ff | ||
|
|
ec82c86210 | ||
|
|
de03bef226 | ||
|
|
0f8166620e | ||
|
|
76c2de4394 | ||
|
|
0d38ded981 | ||
|
|
646888c06f | ||
|
|
332f6f1bb4 | ||
|
|
aaab5371b2 | ||
|
|
ad931d7ea2 | ||
|
|
377e430d74 | ||
|
|
a797467606 | ||
|
|
5ee83d902d | ||
|
|
27ae296b28 | ||
|
|
e589f27195 | ||
|
|
c89d6a5a59 | ||
|
|
861365930d | ||
|
|
0d4d92a202 | ||
|
|
4c6ad0e385 | ||
|
|
ad45e995e2 | ||
|
|
50a035a479 | ||
|
|
c0dbd6cbb2 | ||
|
|
686af4a330 | ||
|
|
46aad06e34 | ||
|
|
3921b2304d | ||
|
|
bca5b0419c | ||
|
|
9754b061dd | ||
|
|
407b31c5c1 | ||
|
|
37b1228552 | ||
|
|
0acd9ca767 | ||
|
|
8f3c9f029c | ||
|
|
9310732343 | ||
|
|
e767e506f3 | ||
|
|
ef3a612338 | ||
|
|
d66a42a0aa | ||
|
|
0f06de0047 | ||
|
|
963181fef2 | ||
|
|
ffd4f9ee73 | ||
|
|
976622df89 | ||
|
|
13c220338c | ||
|
|
1291dc77c8 | ||
|
|
08e5477e74 | ||
|
|
c4c6a2243e | ||
|
|
58791e3e91 | ||
|
|
d5bb4bc149 | ||
|
|
3d1199363b | ||
|
|
f225fa33e1 | ||
|
|
e85c8b3dde | ||
|
|
737be8dcac | ||
|
|
77dd939172 | ||
|
|
0a5965a423 | ||
|
|
a53be6814c | ||
|
|
415b8e9da3 | ||
|
|
f034c24d13 | ||
|
|
1ac93d6269 | ||
|
|
906c8f7999 | ||
|
|
c904a5ded8 | ||
|
|
0c9486f6b4 | ||
|
|
576740a502 | ||
|
|
b3f9f43b57 | ||
|
|
e7424bcc66 | ||
|
|
209ec70ea9 | ||
|
|
3b4e251034 | ||
|
|
86beb879a2 | ||
|
|
321d434141 | ||
|
|
b9d17e27b1 | ||
|
|
2f6f6da6c0 | ||
|
|
c3d3fa67f7 | ||
|
|
032dfd69be | ||
|
|
e9dc154642 | ||
|
|
b43840b636 | ||
|
|
1a9d8e35ba | ||
|
|
ccb61415f5 | ||
|
|
08944241bb | ||
|
|
63030147ea | ||
|
|
8ff71c44ca | ||
|
|
4eaf16f500 | ||
|
|
1a9c8a62f2 |
1
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
blank_issues_enabled: false
|
||||||
74
.github/workflows/build.yml
vendored
@@ -41,12 +41,6 @@ on:
|
|||||||
default: true
|
default: true
|
||||||
type: boolean
|
type: boolean
|
||||||
|
|
||||||
build_linux_arm64:
|
|
||||||
description: "Build Linux-arm64"
|
|
||||||
required: false
|
|
||||||
default: true
|
|
||||||
type: boolean
|
|
||||||
|
|
||||||
tag:
|
tag:
|
||||||
description: "tag"
|
description: "tag"
|
||||||
required: false
|
required: false
|
||||||
@@ -55,14 +49,14 @@ on:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
android:
|
android:
|
||||||
if: ${{ github.event_name == 'pull_request' || github.event.inputs.build_android == 'true' }}
|
if: ${{ (github.event_name == 'pull_request' && github.repository == 'bggRGjQaUbCoE/PiliPlus') || github.event.inputs.build_android == 'true' }}
|
||||||
name: Release Android
|
name: Release Android
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
permissions: write-all
|
permissions: write-all
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: 代码迁出
|
- name: 代码迁出
|
||||||
uses: actions/checkout@v5
|
uses: actions/checkout@v6
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
@@ -84,10 +78,9 @@ jobs:
|
|||||||
flutter-version-file: pubspec.yaml
|
flutter-version-file: pubspec.yaml
|
||||||
cache: true
|
cache: true
|
||||||
|
|
||||||
- name: apply bottom sheet patch
|
- name: Apply Patch
|
||||||
working-directory: ${{ env.FLUTTER_ROOT }}
|
shell: pwsh
|
||||||
run: git apply $GITHUB_WORKSPACE/lib/scripts/bottom_sheet_patch.diff
|
run: lib/scripts/patch.ps1 android
|
||||||
continue-on-error: true
|
|
||||||
|
|
||||||
- name: Write key
|
- name: Write key
|
||||||
if: github.event_name == 'workflow_dispatch'
|
if: github.event_name == 'workflow_dispatch'
|
||||||
@@ -101,13 +94,20 @@ jobs:
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
- name: Set and Extract version
|
- name: Set and Extract version
|
||||||
|
if: ${{ github.event_name == 'workflow_dispatch' }}
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
run: lib/scripts/build.ps1 android
|
run: lib/scripts/build.ps1 android
|
||||||
|
|
||||||
- name: flutter build apk
|
- name: Flutter Build Release Apk
|
||||||
|
if: ${{ github.event_name == 'workflow_dispatch' }}
|
||||||
run: flutter build apk --release --split-per-abi --dart-define-from-file=pili_release.json --pub
|
run: flutter build apk --release --split-per-abi --dart-define-from-file=pili_release.json --pub
|
||||||
|
|
||||||
- name: rename
|
- name: Flutter Build Dev Apk
|
||||||
|
if: ${{ github.event_name == 'pull_request' }}
|
||||||
|
run: |
|
||||||
|
flutter build apk --release --split-per-abi --android-project-arg dev=1 --pub
|
||||||
|
|
||||||
|
- name: Rename
|
||||||
run: |
|
run: |
|
||||||
for file in build/app/outputs/flutter-apk/app-*-release.apk; do
|
for file in build/app/outputs/flutter-apk/app-*-release.apk; do
|
||||||
abi=$(echo "$file" | sed -E 's|.*app-(.*)-release\.apk|\1|')
|
abi=$(echo "$file" | sed -E 's|.*app-(.*)-release\.apk|\1|')
|
||||||
@@ -116,66 +116,58 @@ jobs:
|
|||||||
shell: bash
|
shell: bash
|
||||||
|
|
||||||
- name: Release
|
- name: Release
|
||||||
if: ${{ github.event.inputs.tag != '' }}
|
if: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.tag != '' }}
|
||||||
uses: softprops/action-gh-release@v2
|
uses: softprops/action-gh-release@v2
|
||||||
with:
|
with:
|
||||||
tag_name: ${{ github.event.inputs.tag }}
|
tag_name: ${{ github.event.inputs.tag }}
|
||||||
name: ${{ github.event.inputs.tag }}
|
name: ${{ github.event.inputs.tag }}
|
||||||
files: |
|
files: PiliPlus_android_*.apk
|
||||||
PiliPlus_android_*.apk
|
|
||||||
|
|
||||||
- name: 上传
|
- name: 上传
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v7
|
||||||
with:
|
with:
|
||||||
|
archive: false
|
||||||
name: Android_arm64-v8a
|
name: Android_arm64-v8a
|
||||||
path: |
|
path: PiliPlus_android_*_arm64-v8a.apk
|
||||||
PiliPlus_android_*_arm64-v8a.apk
|
|
||||||
|
|
||||||
- name: 上传
|
- name: 上传
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v7
|
||||||
with:
|
with:
|
||||||
|
archive: false
|
||||||
name: Android_armeabi-v7a
|
name: Android_armeabi-v7a
|
||||||
path: |
|
path: PiliPlus_android_*_armeabi-v7a.apk
|
||||||
PiliPlus_android_*_armeabi-v7a.apk
|
|
||||||
|
|
||||||
- name: 上传
|
- name: 上传
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v7
|
||||||
with:
|
with:
|
||||||
|
archive: false
|
||||||
name: Android_x86_64
|
name: Android_x86_64
|
||||||
path: |
|
path: PiliPlus_android_*_x86_64.apk
|
||||||
PiliPlus_android_*_x86_64.apk
|
|
||||||
|
|
||||||
ios:
|
ios:
|
||||||
if: ${{ github.event_name == 'pull_request' || github.event.inputs.build_ios == 'true' }}
|
if: ${{ (github.event_name == 'pull_request' && github.repository == 'bggRGjQaUbCoE/PiliPlus') || github.event.inputs.build_ios == 'true' }}
|
||||||
uses: ./.github/workflows/ios.yml
|
uses: ./.github/workflows/ios.yml
|
||||||
permissions: write-all
|
permissions: write-all
|
||||||
with:
|
with:
|
||||||
tag: github.event.inputs.tag
|
tag: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.tag || '' }}
|
||||||
|
|
||||||
mac:
|
mac:
|
||||||
if: ${{ github.event_name == 'pull_request' || github.event.inputs.build_mac == 'true' }}
|
if: ${{ github.event.inputs.build_mac == 'true' }}
|
||||||
uses: ./.github/workflows/mac.yml
|
uses: ./.github/workflows/mac.yml
|
||||||
permissions: write-all
|
permissions: write-all
|
||||||
with:
|
with:
|
||||||
tag: github.event.inputs.tag
|
tag: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.tag || '' }}
|
||||||
|
|
||||||
win_x64:
|
win_x64:
|
||||||
if: ${{ github.event_name == 'pull_request' || github.event.inputs.build_win_x64 == 'true' }}
|
if: ${{ (github.event_name == 'pull_request' && github.repository == 'bggRGjQaUbCoE/PiliPlus') || github.event.inputs.build_win_x64 == 'true' }}
|
||||||
uses: ./.github/workflows/win_x64.yml
|
uses: ./.github/workflows/win_x64.yml
|
||||||
permissions: write-all
|
permissions: write-all
|
||||||
with:
|
with:
|
||||||
tag: github.event.inputs.tag
|
tag: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.tag || '' }}
|
||||||
|
|
||||||
linux_x64:
|
linux_x64:
|
||||||
if: ${{ github.event_name == 'pull_request' || github.event.inputs.build_linux_x64 == 'true' }}
|
if: ${{ github.event.inputs.build_linux_x64 == 'true' }}
|
||||||
uses: ./.github/workflows/linux_x64.yml
|
uses: ./.github/workflows/linux_x64.yml
|
||||||
permissions: write-all
|
permissions: write-all
|
||||||
with:
|
with:
|
||||||
tag: github.event.inputs.tag
|
tag: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.tag || '' }}
|
||||||
|
|
||||||
linux_arm64:
|
|
||||||
if: ${{ github.event_name == 'pull_request' || github.event.inputs.build_linux_arm64 == 'true' }}
|
|
||||||
uses: ./.github/workflows/linux_arm64.yml
|
|
||||||
permissions: write-all
|
|
||||||
with:
|
|
||||||
tag: github.event.inputs.tag
|
|
||||||
|
|||||||
15
.github/workflows/ios.yml
vendored
@@ -13,10 +13,10 @@ on:
|
|||||||
jobs:
|
jobs:
|
||||||
build-macos-app:
|
build-macos-app:
|
||||||
name: Release IOS
|
name: Release IOS
|
||||||
runs-on: macos-latest
|
runs-on: macos-26
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v5
|
uses: actions/checkout@v6
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
@@ -30,11 +30,17 @@ jobs:
|
|||||||
shell: pwsh
|
shell: pwsh
|
||||||
run: lib/scripts/build.ps1
|
run: lib/scripts/build.ps1
|
||||||
|
|
||||||
|
- name: Apply Patch
|
||||||
|
shell: pwsh
|
||||||
|
run: lib/scripts/patch.ps1 iOS
|
||||||
|
|
||||||
- name: Build iOS
|
- name: Build iOS
|
||||||
run: |
|
run: |
|
||||||
flutter build ios --release --no-codesign --dart-define-from-file=pili_release.json
|
flutter build ios --release --no-codesign --dart-define-from-file=pili_release.json
|
||||||
ln -sf ./build/ios/iphoneos Payload
|
ln -sf ./build/ios/iphoneos Payload
|
||||||
zip -r9 PiliPlus_ios_${{env.version}}.ipa Payload/runner.app
|
# make AltSign happy...
|
||||||
|
find Payload/Runner.app/Frameworks -type d -name "*.framework" -exec codesign --force --sign - --preserve-metadata=identifier,entitlements {} \;
|
||||||
|
zip -r9 PiliPlus_ios_${{env.version}}.ipa Payload/Runner.app
|
||||||
|
|
||||||
- name: Release
|
- name: Release
|
||||||
if: ${{ github.event.inputs.tag != '' }}
|
if: ${{ github.event.inputs.tag != '' }}
|
||||||
@@ -46,7 +52,8 @@ jobs:
|
|||||||
PiliPlus_ios_*.ipa
|
PiliPlus_ios_*.ipa
|
||||||
|
|
||||||
- name: Upload ios release
|
- name: Upload ios release
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v7
|
||||||
with:
|
with:
|
||||||
|
archive: false
|
||||||
name: iOS-release
|
name: iOS-release
|
||||||
path: PiliPlus_ios_*.ipa
|
path: PiliPlus_ios_*.ipa
|
||||||
|
|||||||
210
.github/workflows/linux_arm64.yml
vendored
@@ -1,210 +0,0 @@
|
|||||||
name: Build for Linux Arm64
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_call:
|
|
||||||
inputs:
|
|
||||||
tag:
|
|
||||||
description: "tag"
|
|
||||||
required: false
|
|
||||||
default: ""
|
|
||||||
type: string
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build-linux-app:
|
|
||||||
name: Release Linux Arm64
|
|
||||||
runs-on: ubuntu-24.04-arm
|
|
||||||
steps:
|
|
||||||
- name: Checkout repository
|
|
||||||
uses: actions/checkout@v5
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
|
|
||||||
- name: Install dependencies
|
|
||||||
run: |
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get install -y clang cmake libgtk-3-dev ninja-build libayatana-appindicator3-dev unzip webkit2gtk-4.1 libasound2-dev rpm patchelf
|
|
||||||
sudo apt-get install -y gcc g++ autoconf automake debhelper glslang-dev ladspa-sdk xutils-dev libasound2-dev \
|
|
||||||
libarchive-dev libbluray-dev libbs2b-dev libcaca-dev libcdio-paranoia-dev libdrm-dev \
|
|
||||||
libdav1d-dev libdvdnav-dev libegl1-mesa-dev libepoxy-dev libfontconfig-dev libfreetype6-dev \
|
|
||||||
libfribidi-dev libgl1-mesa-dev libgbm-dev libgme-dev libgsm1-dev libharfbuzz-dev libjpeg-dev \
|
|
||||||
libbrotli-dev liblcms2-dev libmodplug-dev libmp3lame-dev libopenal-dev \
|
|
||||||
libopus-dev libopencore-amrnb-dev libopencore-amrwb-dev libpulse-dev librtmp-dev \
|
|
||||||
libsdl2-dev libsixel-dev libssh-dev libsoxr-dev libspeex-dev libtool \
|
|
||||||
libv4l-dev libva-dev libvdpau-dev libvorbis-dev libvo-amrwbenc-dev \
|
|
||||||
libunwind-dev libvpx-dev libwayland-dev libx11-dev libxext-dev \
|
|
||||||
libxkbcommon-dev libxrandr-dev libxss-dev libxv-dev libxvidcore-dev \
|
|
||||||
linux-libc-dev nasm ninja-build pkg-config python3 python3-docutils wayland-protocols \
|
|
||||||
x11proto-core-dev zlib1g-dev libfdk-aac-dev libtheora-dev libwebp-dev \
|
|
||||||
unixodbc-dev libpq-dev libxxhash-dev libaom-dev \
|
|
||||||
libgtk-3-0 libblkid1 liblzma5 libmpv-dev
|
|
||||||
shell: bash
|
|
||||||
|
|
||||||
- name: Setup flutter
|
|
||||||
uses: subosito/flutter-action@v2
|
|
||||||
with:
|
|
||||||
channel: master
|
|
||||||
flutter-version-file: pubspec.yaml
|
|
||||||
cache: true
|
|
||||||
|
|
||||||
- name: Set and Extract version
|
|
||||||
shell: pwsh
|
|
||||||
run: lib/scripts/build.ps1
|
|
||||||
|
|
||||||
#TODO: deb and rpm packages need to be build
|
|
||||||
- name: Build Linux
|
|
||||||
run: flutter build linux --release -v --pub --dart-define-from-file=pili_release.json
|
|
||||||
|
|
||||||
- name: Package .tar.gz
|
|
||||||
run: tar -zcvf PiliPlus_linux_${{ env.version }}_arm64.tar.gz -C build/linux/arm64/release/bundle .
|
|
||||||
|
|
||||||
- name: Packege deb
|
|
||||||
run: |
|
|
||||||
printf "建立构建目录...\n"
|
|
||||||
mkdir "PiliPlus_linux_${{ env.version }}_arm64"
|
|
||||||
pushd "PiliPlus_linux_${{ env.version }}_arm64"
|
|
||||||
mkdir -p opt/PiliPlus
|
|
||||||
mkdir -p usr/share/applications
|
|
||||||
mkdir -p usr/share/icons/hicolor/512x512/apps
|
|
||||||
|
|
||||||
printf "复制文件...\n"
|
|
||||||
cp -r ../build/linux/arm64/release/bundle/* opt/PiliPlus
|
|
||||||
cp -r ../assets/linux/DEBIAN .
|
|
||||||
cp ../assets/linux/piliplus.desktop usr/share/applications
|
|
||||||
cp ../assets/images/logo/logo.png usr/share/icons/hicolor/512x512/apps/piliplus.png
|
|
||||||
|
|
||||||
printf "修改控制文件...\n"
|
|
||||||
# 替换版本号
|
|
||||||
sed -i "2s/version_need_change/${{ env.version }}/g" DEBIAN/control
|
|
||||||
# 计算安装大小并替换
|
|
||||||
SIZE_KB=$(du -s -b --apparent-size . | awk '{print int($1)}')
|
|
||||||
SIZE_KB=$(($SIZE_KB - $(du -s -b --apparent-size DEBIAN | awk '{print int($1)}')))
|
|
||||||
SIZE_KB=$(echo $SIZE_KB | awk '{print int($1/1024 + 0.999)}')
|
|
||||||
printf "\t安装大小: %s KB\n" "$SIZE_KB"
|
|
||||||
sed -i "9s/size_need_change/${SIZE_KB}/g" DEBIAN/control
|
|
||||||
|
|
||||||
printf "生成并写入 md5sums ...\n"
|
|
||||||
md5sum opt/PiliPlus/piliplus >> DEBIAN/md5sums
|
|
||||||
md5sum opt/PiliPlus/lib/* >> DEBIAN/md5sums
|
|
||||||
md5sum opt/PiliPlus/data/icudtl.dat >> DEBIAN/md5sums
|
|
||||||
|
|
||||||
printf "设置权限...\n"
|
|
||||||
chmod 0644 DEBIAN/control
|
|
||||||
chmod 0644 DEBIAN/md5sums
|
|
||||||
chmod 0755 DEBIAN/postinst
|
|
||||||
chmod 0755 DEBIAN/postrm
|
|
||||||
chmod 0755 DEBIAN/prerm
|
|
||||||
|
|
||||||
printf "打包 deb 文件...\n"
|
|
||||||
popd
|
|
||||||
dpkg-deb --build --verbose --root-owner-group "PiliPlus_linux_${{ env.version }}_arm64"
|
|
||||||
printf "完成: PiliPlus_linux_%s_arm64.deb\n" "${{ env.version }}"
|
|
||||||
shell: bash
|
|
||||||
|
|
||||||
- name: Packege rpm
|
|
||||||
run: |
|
|
||||||
printf "建立 RPM 构建目录...\n"
|
|
||||||
RPM_BUILD_ROOT="$PWD/rpm_build"
|
|
||||||
mkdir -p "$RPM_BUILD_ROOT/BUILD" "$RPM_BUILD_ROOT/RPMS" "$RPM_BUILD_ROOT/SOURCES" "$RPM_BUILD_ROOT/SPECS" "$RPM_BUILD_ROOT/SRPMS"
|
|
||||||
|
|
||||||
printf "准备源码归档(仅包含运行时与元数据)...\n"
|
|
||||||
DATE="$(date '+%a %b %d %Y')"
|
|
||||||
SRC_DIR="$PWD/piliplus-${{ env.version }}"
|
|
||||||
mkdir -p "$SRC_DIR/bundle" "$SRC_DIR/assets"
|
|
||||||
cp -r build/linux/arm64/release/bundle/* "$SRC_DIR/bundle/"
|
|
||||||
cp assets/linux/piliplus.desktop "$SRC_DIR/assets/piliplus.desktop"
|
|
||||||
cp assets/images/logo/logo.png "$SRC_DIR/assets/piliplus.png"
|
|
||||||
tar -zcvf "$RPM_BUILD_ROOT/SOURCES/piliplus-${{ env.version }}.tar.gz" -C "$PWD" "piliplus-${{ env.version }}"
|
|
||||||
|
|
||||||
printf "生成 spec 文件...\n"
|
|
||||||
cat > "$RPM_BUILD_ROOT/SPECS/piliplus.spec" <<EOF
|
|
||||||
Name: piliplus
|
|
||||||
Version: ${{ env.version }}
|
|
||||||
Release: 1%{?dist}
|
|
||||||
Summary: PiliPlus Linux Version
|
|
||||||
License: GPL-3.0
|
|
||||||
Source0: piliplus-${{ env.version }}.tar.gz
|
|
||||||
Requires: desktop-file-utils, hicolor-icon-theme
|
|
||||||
|
|
||||||
%description
|
|
||||||
使用 Flutter 开发的 BiliBili 第三方客户端
|
|
||||||
|
|
||||||
%prep
|
|
||||||
%setup -q -n piliplus-${{ env.version }}
|
|
||||||
|
|
||||||
%build
|
|
||||||
|
|
||||||
%install
|
|
||||||
mkdir -p %{buildroot}/opt/PiliPlus
|
|
||||||
cp -r bundle/* %{buildroot}/opt/PiliPlus/
|
|
||||||
|
|
||||||
# 二进制权限与命令行入口
|
|
||||||
chmod 755 %{buildroot}/opt/PiliPlus/piliplus
|
|
||||||
mkdir -p %{buildroot}/usr/bin
|
|
||||||
ln -sf /opt/PiliPlus/piliplus %{buildroot}/usr/bin/piliplus
|
|
||||||
|
|
||||||
# 桌面集成
|
|
||||||
mkdir -p %{buildroot}/usr/share/applications
|
|
||||||
install -m 644 assets/piliplus.desktop %{buildroot}/usr/share/applications/piliplus.desktop
|
|
||||||
|
|
||||||
mkdir -p %{buildroot}/usr/share/icons/hicolor/512x512/apps
|
|
||||||
install -m 644 assets/piliplus.png %{buildroot}/usr/share/icons/hicolor/512x512/apps/piliplus.png
|
|
||||||
|
|
||||||
%post
|
|
||||||
update-desktop-database -q || true
|
|
||||||
gtk-update-icon-cache -q -t -f %{_datadir}/icons/hicolor || true
|
|
||||||
|
|
||||||
%postun
|
|
||||||
update-desktop-database -q || true
|
|
||||||
gtk-update-icon-cache -q -t -f %{_datadir}/icons/hicolor || true
|
|
||||||
|
|
||||||
%files
|
|
||||||
/opt/PiliPlus
|
|
||||||
/usr/bin/piliplus
|
|
||||||
/usr/share/applications/piliplus.desktop
|
|
||||||
/usr/share/icons/hicolor/512x512/apps/piliplus.png
|
|
||||||
|
|
||||||
%changelog
|
|
||||||
* DATE - ${{ env.version }}-1
|
|
||||||
- Initial RPM release
|
|
||||||
EOF
|
|
||||||
|
|
||||||
sed -i "s/DATE/${DATE}/g" "$RPM_BUILD_ROOT/SPECS/piliplus.spec"
|
|
||||||
|
|
||||||
printf "构建 RPM 包...\n"
|
|
||||||
rpmbuild --define "_topdir $RPM_BUILD_ROOT" -bb "$RPM_BUILD_ROOT/SPECS/piliplus.spec"
|
|
||||||
|
|
||||||
printf "移动生成的 RPM...\n"
|
|
||||||
find "$RPM_BUILD_ROOT/RPMS" -name "*.rpm" -exec mv {} "PiliPlus_linux_${{ env.version }}_arm64.rpm" \;
|
|
||||||
|
|
||||||
printf "完成: PiliPlus_linux_%s_arm64.rpm\n" "${{ env.version }}"
|
|
||||||
shell: bash
|
|
||||||
|
|
||||||
- name: Release
|
|
||||||
if: ${{ github.event.inputs.tag != '' }}
|
|
||||||
uses: softprops/action-gh-release@v2
|
|
||||||
with:
|
|
||||||
tag_name: ${{ github.event.inputs.tag }}
|
|
||||||
name: ${{ github.event.inputs.tag }}
|
|
||||||
files: |
|
|
||||||
PiliPlus_linux_*.tar.gz
|
|
||||||
PiliPlus_linux_*.deb
|
|
||||||
PiliPlus_linux_*.rpm
|
|
||||||
|
|
||||||
- name: Upload linux targz package
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: Linux_targz_arm64_packege
|
|
||||||
path: PiliPlus_linux_*.tar.gz
|
|
||||||
|
|
||||||
- name: Upload linux deb package
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: Linux_deb_arm64_package
|
|
||||||
path: PiliPlus_linux_*.deb
|
|
||||||
|
|
||||||
- name: Upload linux rpm package
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: Linux_rpm_arm64_package
|
|
||||||
path: PiliPlus_linux_*.rpm
|
|
||||||
74
.github/workflows/linux_x64.yml
vendored
@@ -16,7 +16,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v5
|
uses: actions/checkout@v6
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
@@ -51,6 +51,10 @@ jobs:
|
|||||||
shell: pwsh
|
shell: pwsh
|
||||||
run: lib/scripts/build.ps1
|
run: lib/scripts/build.ps1
|
||||||
|
|
||||||
|
- name: Apply Patch
|
||||||
|
shell: pwsh
|
||||||
|
run: lib/scripts/patch.ps1 Linux
|
||||||
|
|
||||||
#TODO: deb and rpm packages need to be build
|
#TODO: deb and rpm packages need to be build
|
||||||
- name: Build Linux
|
- name: Build Linux
|
||||||
run: flutter build linux --release -v --pub --dart-define-from-file=pili_release.json
|
run: flutter build linux --release -v --pub --dart-define-from-file=pili_release.json
|
||||||
@@ -70,7 +74,7 @@ jobs:
|
|||||||
printf "复制文件...\n"
|
printf "复制文件...\n"
|
||||||
cp -r ../build/linux/x64/release/bundle/* opt/PiliPlus
|
cp -r ../build/linux/x64/release/bundle/* opt/PiliPlus
|
||||||
cp -r ../assets/linux/DEBIAN .
|
cp -r ../assets/linux/DEBIAN .
|
||||||
cp ../assets/linux/piliplus.desktop usr/share/applications
|
cp ../assets/linux/com.example.piliplus.desktop usr/share/applications
|
||||||
cp ../assets/images/logo/logo.png usr/share/icons/hicolor/512x512/apps/piliplus.png
|
cp ../assets/images/logo/logo.png usr/share/icons/hicolor/512x512/apps/piliplus.png
|
||||||
|
|
||||||
printf "修改控制文件...\n"
|
printf "修改控制文件...\n"
|
||||||
@@ -112,7 +116,7 @@ jobs:
|
|||||||
SRC_DIR="$PWD/piliplus-${{ env.version }}"
|
SRC_DIR="$PWD/piliplus-${{ env.version }}"
|
||||||
mkdir -p "$SRC_DIR/bundle" "$SRC_DIR/assets"
|
mkdir -p "$SRC_DIR/bundle" "$SRC_DIR/assets"
|
||||||
cp -r build/linux/x64/release/bundle/* "$SRC_DIR/bundle/"
|
cp -r build/linux/x64/release/bundle/* "$SRC_DIR/bundle/"
|
||||||
cp assets/linux/piliplus.desktop "$SRC_DIR/assets/piliplus.desktop"
|
cp assets/linux/com.example.piliplus.desktop "$SRC_DIR/assets/com.example.piliplus.desktop"
|
||||||
cp assets/images/logo/logo.png "$SRC_DIR/assets/piliplus.png"
|
cp assets/images/logo/logo.png "$SRC_DIR/assets/piliplus.png"
|
||||||
tar -zcvf "$RPM_BUILD_ROOT/SOURCES/piliplus-${{ env.version }}.tar.gz" -C "$PWD" "piliplus-${{ env.version }}"
|
tar -zcvf "$RPM_BUILD_ROOT/SOURCES/piliplus-${{ env.version }}.tar.gz" -C "$PWD" "piliplus-${{ env.version }}"
|
||||||
|
|
||||||
@@ -145,7 +149,7 @@ jobs:
|
|||||||
|
|
||||||
# 桌面集成
|
# 桌面集成
|
||||||
mkdir -p %{buildroot}/usr/share/applications
|
mkdir -p %{buildroot}/usr/share/applications
|
||||||
install -m 644 assets/piliplus.desktop %{buildroot}/usr/share/applications/piliplus.desktop
|
install -m 644 assets/com.example.piliplus.desktop %{buildroot}/usr/share/applications/com.example.piliplus.desktop
|
||||||
|
|
||||||
mkdir -p %{buildroot}/usr/share/icons/hicolor/512x512/apps
|
mkdir -p %{buildroot}/usr/share/icons/hicolor/512x512/apps
|
||||||
install -m 644 assets/piliplus.png %{buildroot}/usr/share/icons/hicolor/512x512/apps/piliplus.png
|
install -m 644 assets/piliplus.png %{buildroot}/usr/share/icons/hicolor/512x512/apps/piliplus.png
|
||||||
@@ -161,7 +165,7 @@ jobs:
|
|||||||
%files
|
%files
|
||||||
/opt/PiliPlus
|
/opt/PiliPlus
|
||||||
/usr/bin/piliplus
|
/usr/bin/piliplus
|
||||||
/usr/share/applications/piliplus.desktop
|
/usr/share/applications/com.example.piliplus.desktop
|
||||||
/usr/share/icons/hicolor/512x512/apps/piliplus.png
|
/usr/share/icons/hicolor/512x512/apps/piliplus.png
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
@@ -180,6 +184,49 @@ jobs:
|
|||||||
printf "完成: PiliPlus_linux_%s_amd64.rpm\n" "${{ env.version }}"
|
printf "完成: PiliPlus_linux_%s_amd64.rpm\n" "${{ env.version }}"
|
||||||
shell: bash
|
shell: bash
|
||||||
|
|
||||||
|
- name: Package AppImage
|
||||||
|
run: |
|
||||||
|
printf "下载 appimagetool...\n"
|
||||||
|
wget -q https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage
|
||||||
|
chmod +x appimagetool-x86_64.AppImage
|
||||||
|
|
||||||
|
printf "建立 AppDir 目录结构...\n"
|
||||||
|
APPDIR="PiliPlus.AppDir"
|
||||||
|
mkdir -p "$APPDIR/usr/bin"
|
||||||
|
mkdir -p "$APPDIR/usr/lib"
|
||||||
|
mkdir -p "$APPDIR/usr/share/applications"
|
||||||
|
mkdir -p "$APPDIR/usr/share/icons/hicolor/512x512/apps"
|
||||||
|
|
||||||
|
printf "复制应用文件...\n"
|
||||||
|
cp -r build/linux/x64/release/bundle/* "$APPDIR/usr/bin/"
|
||||||
|
|
||||||
|
printf "复制桌面文件和图标...\n"
|
||||||
|
cp assets/linux/com.example.piliplus.desktop "$APPDIR/com.example.piliplus.desktop"
|
||||||
|
cp assets/linux/com.example.piliplus.desktop "$APPDIR/usr/share/applications/com.example.piliplus.desktop"
|
||||||
|
cp assets/images/logo/logo.png "$APPDIR/piliplus.png"
|
||||||
|
cp assets/images/logo/logo.png "$APPDIR/usr/share/icons/hicolor/512x512/apps/piliplus.png"
|
||||||
|
|
||||||
|
printf "创建 AppRun 启动脚本...\n"
|
||||||
|
cat > "$APPDIR/AppRun" <<'APPRUN_EOF'
|
||||||
|
#!/bin/bash
|
||||||
|
SELF=$(readlink -f "$0")
|
||||||
|
HERE=${SELF%/*}
|
||||||
|
export PATH="${HERE}/usr/bin:${PATH}"
|
||||||
|
export LD_LIBRARY_PATH="${HERE}/usr/lib:${LD_LIBRARY_PATH}"
|
||||||
|
exec "${HERE}/usr/bin/piliplus" "$@"
|
||||||
|
APPRUN_EOF
|
||||||
|
chmod +x "$APPDIR/AppRun"
|
||||||
|
|
||||||
|
printf "修改桌面文件中的 Exec 路径...\n"
|
||||||
|
sed -i 's|Exec=piliplus|Exec=piliplus|g' "$APPDIR/com.example.piliplus.desktop"
|
||||||
|
sed -i 's|Icon=piliplus|Icon=piliplus|g' "$APPDIR/com.example.piliplus.desktop"
|
||||||
|
|
||||||
|
printf "打包 AppImage...\n"
|
||||||
|
ARCH=x86_64 ./appimagetool-x86_64.AppImage "$APPDIR" "PiliPlus_linux_${{ env.version }}_amd64.AppImage"
|
||||||
|
|
||||||
|
printf "完成: PiliPlus_linux_%s_amd64.AppImage\n" "${{ env.version }}"
|
||||||
|
shell: bash
|
||||||
|
|
||||||
- name: Release
|
- name: Release
|
||||||
if: ${{ github.event.inputs.tag != '' }}
|
if: ${{ github.event.inputs.tag != '' }}
|
||||||
uses: softprops/action-gh-release@v2
|
uses: softprops/action-gh-release@v2
|
||||||
@@ -190,21 +237,32 @@ jobs:
|
|||||||
PiliPlus_linux_*.tar.gz
|
PiliPlus_linux_*.tar.gz
|
||||||
PiliPlus_linux_*.deb
|
PiliPlus_linux_*.deb
|
||||||
PiliPlus_linux_*.rpm
|
PiliPlus_linux_*.rpm
|
||||||
|
PiliPlus_linux_*.AppImage
|
||||||
|
|
||||||
- name: Upload linux targz package
|
- name: Upload linux targz package
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v7
|
||||||
with:
|
with:
|
||||||
|
archive: false
|
||||||
name: Linux_targz_amd64_packege
|
name: Linux_targz_amd64_packege
|
||||||
path: PiliPlus_linux_*.tar.gz
|
path: PiliPlus_linux_*.tar.gz
|
||||||
|
|
||||||
- name: Upload linux deb package
|
- name: Upload linux deb package
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v7
|
||||||
with:
|
with:
|
||||||
|
archive: false
|
||||||
name: Linux_deb_amd64_package
|
name: Linux_deb_amd64_package
|
||||||
path: PiliPlus_linux_*.deb
|
path: PiliPlus_linux_*.deb
|
||||||
|
|
||||||
- name: Upload linux rpm package
|
- name: Upload linux rpm package
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v7
|
||||||
with:
|
with:
|
||||||
|
archive: false
|
||||||
name: Linux_rpm_amd64_package
|
name: Linux_rpm_amd64_package
|
||||||
path: PiliPlus_linux_*.rpm
|
path: PiliPlus_linux_*.rpm
|
||||||
|
|
||||||
|
- name: Upload linux AppImage package
|
||||||
|
uses: actions/upload-artifact@v7
|
||||||
|
with:
|
||||||
|
archive: false
|
||||||
|
name: Linux_AppImage_amd64_package
|
||||||
|
path: PiliPlus_linux_*.AppImage
|
||||||
|
|||||||
13
.github/workflows/mac.yml
vendored
@@ -13,10 +13,10 @@ on:
|
|||||||
jobs:
|
jobs:
|
||||||
build-mac-app:
|
build-mac-app:
|
||||||
name: Release Mac
|
name: Release Mac
|
||||||
runs-on: macos-latest
|
runs-on: macos-26
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v5
|
uses: actions/checkout@v6
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
@@ -30,13 +30,17 @@ jobs:
|
|||||||
shell: pwsh
|
shell: pwsh
|
||||||
run: lib/scripts/build.ps1
|
run: lib/scripts/build.ps1
|
||||||
|
|
||||||
|
- name: Apply Patch
|
||||||
|
shell: pwsh
|
||||||
|
run: lib/scripts/patch.ps1 macOS
|
||||||
|
|
||||||
- name: Build Mac
|
- name: Build Mac
|
||||||
run: flutter build macos --release --dart-define-from-file=pili_release.json
|
run: flutter build macos --release --dart-define-from-file=pili_release.json
|
||||||
|
|
||||||
- name: Prepare Upload
|
- name: Prepare Upload
|
||||||
run: |
|
run: |
|
||||||
npm install --global create-dmg
|
npm install --global create-dmg
|
||||||
create-dmg build/macos/Build/Products/Release/PiliPlus.app
|
create-dmg build/macos/Build/Products/Release/PiliPlus.app || true
|
||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
|
|
||||||
- name: Rename DMG
|
- name: Rename DMG
|
||||||
@@ -52,7 +56,8 @@ jobs:
|
|||||||
PiliPlus_macos_*.dmg
|
PiliPlus_macos_*.dmg
|
||||||
|
|
||||||
- name: Upload macos release
|
- name: Upload macos release
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v7
|
||||||
with:
|
with:
|
||||||
|
archive: false
|
||||||
name: macOS-release
|
name: macOS-release
|
||||||
path: PiliPlus_macos_*.dmg
|
path: PiliPlus_macos_*.dmg
|
||||||
|
|||||||
19
.github/workflows/win_x64.yml
vendored
@@ -16,7 +16,7 @@ jobs:
|
|||||||
runs-on: windows-latest
|
runs-on: windows-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v5
|
uses: actions/checkout@v6
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
@@ -26,6 +26,10 @@ jobs:
|
|||||||
channel: stable
|
channel: stable
|
||||||
flutter-version-file: pubspec.yaml
|
flutter-version-file: pubspec.yaml
|
||||||
|
|
||||||
|
- name: Apply Patch
|
||||||
|
shell: pwsh
|
||||||
|
run: lib/scripts/patch.ps1 windows
|
||||||
|
|
||||||
- name: Add fastforge and Inno Setup
|
- name: Add fastforge and Inno Setup
|
||||||
run: |
|
run: |
|
||||||
dart pub global activate fastforge
|
dart pub global activate fastforge
|
||||||
@@ -52,9 +56,8 @@ jobs:
|
|||||||
mv dist/**/*.exe PiliPlus-Win-Setup/PiliPlus_windows_${{env.version}}_x64_setup.exe
|
mv dist/**/*.exe PiliPlus-Win-Setup/PiliPlus_windows_${{env.version}}_x64_setup.exe
|
||||||
|
|
||||||
- name: Compress
|
- name: Compress
|
||||||
if: ${{ github.event.inputs.tag != '' }}
|
|
||||||
run: |
|
run: |
|
||||||
Compress-Archive -Path "Release/PiliPlus-Win" -DestinationPath "PiliPlus_windows_${{env.version}}_x64.zip"
|
Compress-Archive -Path "Release/PiliPlus-Win" -DestinationPath "PiliPlus_windows_${{env.version}}_x64_portable.zip"
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
|
|
||||||
- name: Release
|
- name: Release
|
||||||
@@ -68,13 +71,15 @@ jobs:
|
|||||||
PiliPlus-Win-Setup/PiliPlus_windows_*.exe
|
PiliPlus-Win-Setup/PiliPlus_windows_*.exe
|
||||||
|
|
||||||
- name: Upload windows file release
|
- name: Upload windows file release
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v7
|
||||||
with:
|
with:
|
||||||
|
archive: false
|
||||||
name: Windows-file-x64-release
|
name: Windows-file-x64-release
|
||||||
path: Release
|
path: PiliPlus_windows_*.zip
|
||||||
|
|
||||||
- name: Upload windows setup release
|
- name: Upload windows setup release
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v7
|
||||||
with:
|
with:
|
||||||
|
archive: false
|
||||||
name: Windows-setup-x64-release
|
name: Windows-setup-x64-release
|
||||||
path: PiliPlus-Win-Setup
|
path: PiliPlus-Win-Setup/PiliPlus_windows_*.exe
|
||||||
|
|||||||
5
.gitignore
vendored
@@ -5,10 +5,13 @@
|
|||||||
*.swp
|
*.swp
|
||||||
.DS_Store
|
.DS_Store
|
||||||
.atom/
|
.atom/
|
||||||
|
.build/
|
||||||
.buildlog/
|
.buildlog/
|
||||||
.history
|
.history
|
||||||
.svn/
|
.svn/
|
||||||
|
.swiftpm/
|
||||||
migrate_working_dir/
|
migrate_working_dir/
|
||||||
|
Package.resolved
|
||||||
|
|
||||||
# IntelliJ related
|
# IntelliJ related
|
||||||
*.iml
|
*.iml
|
||||||
@@ -146,4 +149,4 @@ pili_release.json
|
|||||||
|
|
||||||
dist
|
dist
|
||||||
|
|
||||||
test.dart
|
test*
|
||||||
@@ -43,6 +43,9 @@
|
|||||||
|
|
||||||
## feat
|
## feat
|
||||||
|
|
||||||
|
- [x] 编辑动态
|
||||||
|
- [x] DLNA 投屏
|
||||||
|
- [x] 离线缓存/播放
|
||||||
- [x] 移动端支持点击弹幕悬停,点赞、复制、举报 by [@My-Responsitories](https://github.com/My-Responsitories)
|
- [x] 移动端支持点击弹幕悬停,点赞、复制、举报 by [@My-Responsitories](https://github.com/My-Responsitories)
|
||||||
- [x] 播放音频
|
- [x] 播放音频
|
||||||
- [x] 跳过番剧片头/片尾
|
- [x] 跳过番剧片头/片尾
|
||||||
@@ -151,7 +154,7 @@
|
|||||||
- [x] 粉丝、关注用户、拉黑用户查看
|
- [x] 粉丝、关注用户、拉黑用户查看
|
||||||
- [x] 用户主页查看
|
- [x] 用户主页查看
|
||||||
- [x] 关注/取关用户
|
- [x] 关注/取关用户
|
||||||
- [ ] 离线缓存
|
- [x] 离线缓存
|
||||||
- [x] 稍后再看
|
- [x] 稍后再看
|
||||||
- [x] 观看记录
|
- [x] 观看记录
|
||||||
- [x] 我的收藏
|
- [x] 我的收藏
|
||||||
@@ -216,8 +219,8 @@
|
|||||||
|
|
||||||
## 声明
|
## 声明
|
||||||
|
|
||||||
此项目(PiliPlus)是个人为了兴趣而开发, 仅用于学习和测试,请于下载后24小时内删除。
|
此项目(PiliPlus)是个人为了兴趣而开发,仅用于学习和测试,请于下载后24小时内删除。
|
||||||
所用API皆从官方网站收集, 不提供任何破解内容。
|
所用API皆从官方网站收集,不提供任何破解内容。
|
||||||
在此致敬原作者:[guozhigq/pilipala](https://github.com/guozhigq/pilipala)
|
在此致敬原作者:[guozhigq/pilipala](https://github.com/guozhigq/pilipala)
|
||||||
在此致敬上游作者:[orz12/PiliPalaX](https://github.com/orz12/PiliPalaX)
|
在此致敬上游作者:[orz12/PiliPalaX](https://github.com/orz12/PiliPalaX)
|
||||||
本仓库做了更激进的修改,感谢原作者的开源精神。
|
本仓库做了更激进的修改,感谢原作者的开源精神。
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ include: package:flutter_lints/flutter.yaml
|
|||||||
analyzer:
|
analyzer:
|
||||||
exclude:
|
exclude:
|
||||||
- lib/grpc/bilibili/**
|
- lib/grpc/bilibili/**
|
||||||
- lib/grpc/google/**
|
# - lib/common/widgets/flutter/**
|
||||||
|
|
||||||
formatter:
|
formatter:
|
||||||
trailing_commas: preserve
|
trailing_commas: preserve
|
||||||
@@ -63,5 +63,19 @@ linter:
|
|||||||
- use_null_aware_elements
|
- use_null_aware_elements
|
||||||
- unnecessary_lambdas
|
- unnecessary_lambdas
|
||||||
- use_is_even_rather_than_modulo
|
- use_is_even_rather_than_modulo
|
||||||
|
- unnecessary_async
|
||||||
|
- unnecessary_await_in_return
|
||||||
|
- unnecessary_getters_setters
|
||||||
|
- prefer_const_literals_to_create_immutables
|
||||||
|
- no_literal_bool_comparisons
|
||||||
|
- use_truncating_division
|
||||||
|
- use_string_buffers
|
||||||
|
- unnecessary_statements
|
||||||
|
- unnecessary_nullable_for_final_variable_declarations
|
||||||
|
- tighten_type_of_initializing_formals
|
||||||
|
- prefer_void_to_null
|
||||||
|
- prefer_spread_collections
|
||||||
|
- unnecessary_to_list_in_spreads
|
||||||
|
- prefer_for_elements_to_map_fromIterable
|
||||||
# Additional information about this file can be found at
|
# Additional information about this file can be found at
|
||||||
# https://dart.dev/guides/language/analysis-options
|
# https://dart.dev/guides/language/analysis-options
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ import org.jetbrains.kotlin.konan.properties.Properties
|
|||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
id("com.android.application")
|
id("com.android.application")
|
||||||
id("kotlin-android")
|
|
||||||
// The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins.
|
// The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins.
|
||||||
id("dev.flutter.flutter-gradle-plugin")
|
id("dev.flutter.flutter-gradle-plugin")
|
||||||
}
|
}
|
||||||
@@ -18,10 +17,6 @@ android {
|
|||||||
targetCompatibility = JavaVersion.VERSION_17
|
targetCompatibility = JavaVersion.VERSION_17
|
||||||
}
|
}
|
||||||
|
|
||||||
kotlinOptions {
|
|
||||||
jvmTarget = JavaVersion.VERSION_17.toString()
|
|
||||||
}
|
|
||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId = "com.example.piliplus"
|
applicationId = "com.example.piliplus"
|
||||||
minSdk = flutter.minSdkVersion
|
minSdk = flutter.minSdkVersion
|
||||||
@@ -49,15 +44,29 @@ android {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
buildFeatures {
|
||||||
|
if (project.hasProperty("dev")) {
|
||||||
|
resValues = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
buildTypes {
|
buildTypes {
|
||||||
all {
|
all {
|
||||||
signingConfig = config ?: signingConfigs["debug"]
|
signingConfig = config ?: signingConfigs["debug"]
|
||||||
}
|
}
|
||||||
release {
|
release {
|
||||||
proguardFiles(
|
if (project.hasProperty("dev")) {
|
||||||
getDefaultProguardFile("proguard-android-optimize.txt"),
|
applicationIdSuffix = ".dev"
|
||||||
"proguard-rules.pro"
|
resValue(
|
||||||
)
|
type = "string",
|
||||||
|
name = "app_name",
|
||||||
|
value = "PiliPlus dev",
|
||||||
|
)
|
||||||
|
}
|
||||||
|
// proguardFiles(
|
||||||
|
// getDefaultProguardFile("proguard-android-optimize.txt"),
|
||||||
|
// "proguard-rules.pro"
|
||||||
|
// )
|
||||||
}
|
}
|
||||||
debug {
|
debug {
|
||||||
applicationIdSuffix = ".debug"
|
applicationIdSuffix = ".debug"
|
||||||
@@ -72,6 +81,12 @@ android {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
kotlin {
|
||||||
|
compilerOptions {
|
||||||
|
jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
flutter {
|
flutter {
|
||||||
source = "../.."
|
source = "../.."
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
package="com.example.piliplus">
|
package="com.example.piliplus">
|
||||||
|
|
||||||
<queries>
|
<queries>
|
||||||
<intent>
|
<intent>
|
||||||
<action android:name="android.intent.action.VIEW" />
|
<action android:name="android.intent.action.VIEW" />
|
||||||
@@ -16,8 +17,7 @@
|
|||||||
</queries>
|
</queries>
|
||||||
<queries>
|
<queries>
|
||||||
<intent>
|
<intent>
|
||||||
<action android:name=
|
<action android:name="android.support.customtabs.action.CustomTabsService" />
|
||||||
"android.support.customtabs.action.CustomTabsService" />
|
|
||||||
</intent>
|
</intent>
|
||||||
</queries>
|
</queries>
|
||||||
|
|
||||||
@@ -35,56 +35,62 @@
|
|||||||
</intent>
|
</intent>
|
||||||
</queries>
|
</queries>
|
||||||
|
|
||||||
<application
|
<application xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:label="@string/app_name"
|
|
||||||
android:name="${applicationName}"
|
android:name="${applicationName}"
|
||||||
android:icon="@mipmap/ic_launcher"
|
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
|
||||||
android:enableOnBackInvokedCallback="false"
|
|
||||||
android:allowBackup="false"
|
android:allowBackup="false"
|
||||||
|
android:enableOnBackInvokedCallback="false"
|
||||||
android:fullBackupContent="false"
|
android:fullBackupContent="false"
|
||||||
|
android:icon="@mipmap/ic_launcher"
|
||||||
|
android:label="@string/app_name"
|
||||||
tools:replace="android:allowBackup">
|
tools:replace="android:allowBackup">
|
||||||
<meta-data
|
<meta-data
|
||||||
android:name="io.flutter.embedding.android.EnableImpeller"
|
android:name="io.flutter.embedding.android.EnableImpeller"
|
||||||
android:value="false" />
|
android:value="false" />
|
||||||
<activity
|
<activity
|
||||||
android:name=".MainActivity"
|
android:name=".MainActivity"
|
||||||
android:exported="true"
|
|
||||||
android:launchMode="singleTask"
|
|
||||||
android:theme="@style/LaunchTheme"
|
|
||||||
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
|
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
|
||||||
|
android:exported="true"
|
||||||
android:hardwareAccelerated="true"
|
android:hardwareAccelerated="true"
|
||||||
android:windowSoftInputMode="adjustResize"
|
android:launchMode="singleTask"
|
||||||
android:supportsPictureInPicture="true"
|
|
||||||
android:resizeableActivity="true"
|
android:resizeableActivity="true"
|
||||||
>
|
android:supportsPictureInPicture="true"
|
||||||
|
android:theme="@style/LaunchTheme"
|
||||||
|
android:windowSoftInputMode="adjustResize">
|
||||||
|
|
||||||
<meta-data android:name="flutter_deeplinking_enabled" android:value="false" />
|
<meta-data
|
||||||
|
android:name="android.app.shortcuts"
|
||||||
|
android:resource="@xml/shortcuts" />
|
||||||
|
|
||||||
|
<meta-data
|
||||||
|
android:name="flutter_deeplinking_enabled"
|
||||||
|
android:value="false" />
|
||||||
|
|
||||||
<!-- Specifies an Android theme to apply to this Activity as soon as
|
<!-- Specifies an Android theme to apply to this Activity as soon as
|
||||||
the Android process has started. This theme is visible to the user
|
the Android process has started. This theme is visible to the user
|
||||||
while the Flutter UI initializes. After that, this theme continues
|
while the Flutter UI initializes. After that, this theme continues
|
||||||
to determine the Window background behind the Flutter UI. -->
|
to determine the Window background behind the Flutter UI. -->
|
||||||
<meta-data
|
<meta-data
|
||||||
android:name="io.flutter.embedding.android.NormalTheme"
|
android:name="io.flutter.embedding.android.NormalTheme"
|
||||||
android:resource="@style/NormalTheme"
|
android:resource="@style/NormalTheme" />
|
||||||
/>
|
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.MAIN"/>
|
<action android:name="android.intent.action.MAIN" />
|
||||||
<category android:name="android.intent.category.LAUNCHER"/>
|
<category android:name="android.intent.category.LAUNCHER" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
<intent-filter android:label="PiliPlus">
|
<intent-filter android:label="PiliPlus">
|
||||||
<action android:name="android.intent.action.VIEW" />
|
<action android:name="android.intent.action.VIEW" />
|
||||||
|
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
<category android:name="android.intent.category.BROWSABLE" />
|
<category android:name="android.intent.category.BROWSABLE" />
|
||||||
<data android:scheme="http"/>
|
|
||||||
<data android:scheme="https"/>
|
<data android:scheme="http" />
|
||||||
<data android:host="*.bilibili.com"/>
|
<data android:scheme="https" />
|
||||||
<data android:host="*.bilibili.cn"/>
|
<data android:host="*.bilibili.com" />
|
||||||
<data android:host="*.bilibili.tv"/>
|
<data android:host="*.bilibili.cn" />
|
||||||
<data android:host="bilibili.com"/>
|
<data android:host="*.bilibili.tv" />
|
||||||
<data android:host="bilibili.cn"/>
|
<data android:host="bilibili.com" />
|
||||||
<data android:host="bilibili.tv"/>
|
<data android:host="bilibili.cn" />
|
||||||
|
<data android:host="bilibili.tv" />
|
||||||
<data android:host="b23.tv" />
|
<data android:host="b23.tv" />
|
||||||
<!--<data android:host="live.bilibili.com"/>-->
|
<!--<data android:host="live.bilibili.com"/>-->
|
||||||
<!--<data android:host="www.bilibili.com"/>-->
|
<!--<data android:host="www.bilibili.com"/>-->
|
||||||
@@ -100,36 +106,56 @@
|
|||||||
<intent-filter android:label="PiliPlus">
|
<intent-filter android:label="PiliPlus">
|
||||||
<action android:name="android.intent.action.VIEW" />
|
<action android:name="android.intent.action.VIEW" />
|
||||||
<action android:name="android.intent.action.SEARCH" />
|
<action android:name="android.intent.action.SEARCH" />
|
||||||
|
<action android:name="com.example.piliplus.SHORTCUT" />
|
||||||
|
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
<category android:name="android.intent.category.BROWSABLE" />
|
<category android:name="android.intent.category.BROWSABLE" />
|
||||||
<data android:scheme="bilibili"/>
|
|
||||||
|
<data android:scheme="bilibili" />
|
||||||
|
<data android:host="download" />
|
||||||
<data android:host="forward" />
|
<data android:host="forward" />
|
||||||
<data android:host="comment"
|
<data
|
||||||
|
android:host="comment"
|
||||||
android:pathPattern="/detail/.*/.*/.*" />
|
android:pathPattern="/detail/.*/.*/.*" />
|
||||||
<data android:host="uper" />
|
<data android:host="uper" />
|
||||||
<data android:host="article"
|
<data
|
||||||
|
android:host="article"
|
||||||
android:pathPattern="/readlist" />
|
android:pathPattern="/readlist" />
|
||||||
<data android:host="opus" />
|
<data android:host="opus" />
|
||||||
<data android:host="advertise" android:path="/home" />
|
<data
|
||||||
|
android:host="advertise"
|
||||||
|
android:path="/home" />
|
||||||
<data android:host="clip" />
|
<data android:host="clip" />
|
||||||
<data android:host="search" android:pathPattern=".*" />
|
<data
|
||||||
|
android:host="search"
|
||||||
|
android:pathPattern=".*" />
|
||||||
<data android:host="stardust-search" />
|
<data android:host="stardust-search" />
|
||||||
<data android:host="music" />
|
<data android:host="music" />
|
||||||
<data android:host="cheese" />
|
<data android:host="cheese" />
|
||||||
<data android:host="bangumi"
|
<data
|
||||||
|
android:host="bangumi"
|
||||||
android:pathPattern="/season.*" />
|
android:pathPattern="/season.*" />
|
||||||
<data android:host="bangumi" android:pathPattern="/.*" />
|
<data
|
||||||
<data android:host="pictureshow"
|
android:host="bangumi"
|
||||||
|
android:pathPattern="/.*" />
|
||||||
|
<data
|
||||||
|
android:host="pictureshow"
|
||||||
android:pathPrefix="/creative_center" />
|
android:pathPrefix="/creative_center" />
|
||||||
<data android:host="cliparea" />
|
<data android:host="cliparea" />
|
||||||
<data android:host="im" />
|
<data android:host="im" />
|
||||||
<data android:host="im" android:path="/notifications" />
|
<data
|
||||||
|
android:host="im"
|
||||||
|
android:path="/notifications" />
|
||||||
<data android:host="following" />
|
<data android:host="following" />
|
||||||
<data android:host="following"
|
<data
|
||||||
|
android:host="following"
|
||||||
android:pathPattern="/detail/.*" />
|
android:pathPattern="/detail/.*" />
|
||||||
<data android:host="following"
|
<data
|
||||||
|
android:host="following"
|
||||||
android:path="/publishInfo/" />
|
android:path="/publishInfo/" />
|
||||||
<data android:host="laser" android:pathPattern="/.*" />
|
<data
|
||||||
|
android:host="laser"
|
||||||
|
android:pathPattern="/.*" />
|
||||||
<data android:host="livearea" />
|
<data android:host="livearea" />
|
||||||
<data android:host="live" />
|
<data android:host="live" />
|
||||||
<data android:host="catalog" />
|
<data android:host="catalog" />
|
||||||
@@ -147,28 +173,44 @@
|
|||||||
<data android:host="video" />
|
<data android:host="video" />
|
||||||
<data android:host="story" />
|
<data android:host="story" />
|
||||||
<data android:host="podcast" />
|
<data android:host="podcast" />
|
||||||
<data android:host="main" android:path="/favorite" />
|
<data
|
||||||
<data android:host="pgc" android:path="/theater/match" />
|
android:host="main"
|
||||||
<data android:host="pgc" android:path="/theater/square" />
|
android:path="/favorite" />
|
||||||
<data android:host="m.bilibili.com"
|
<data
|
||||||
|
android:host="pgc"
|
||||||
|
android:path="/theater/match" />
|
||||||
|
<data
|
||||||
|
android:host="pgc"
|
||||||
|
android:path="/theater/square" />
|
||||||
|
<data
|
||||||
|
android:host="m.bilibili.com"
|
||||||
android:path="/topic-detail" />
|
android:path="/topic-detail" />
|
||||||
<data android:host="article" />
|
<data android:host="article" />
|
||||||
<data android:host="pegasus"
|
<data
|
||||||
|
android:host="pegasus"
|
||||||
android:pathPattern="/channel/v2/.*" />
|
android:pathPattern="/channel/v2/.*" />
|
||||||
<data android:host="feed" android:pathPattern="/channel" />
|
<data
|
||||||
|
android:host="feed"
|
||||||
|
android:pathPattern="/channel" />
|
||||||
<data android:host="vip" />
|
<data android:host="vip" />
|
||||||
<data android:host="user_center" android:path="/vip" />
|
<data
|
||||||
|
android:host="user_center"
|
||||||
|
android:path="/vip" />
|
||||||
<data android:host="history" />
|
<data android:host="history" />
|
||||||
<data android:host="charge" android:path="/rank" />
|
<data
|
||||||
|
android:host="charge"
|
||||||
|
android:path="/rank" />
|
||||||
<data android:host="assistant" />
|
<data android:host="assistant" />
|
||||||
<data android:host="feedback" />
|
<data android:host="feedback" />
|
||||||
<data android:host="auth" android:path="/launch" />
|
<data
|
||||||
|
android:host="auth"
|
||||||
|
android:path="/launch" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
<service
|
<service
|
||||||
android:name="com.ryanheise.audioservice.AudioService"
|
android:name="com.ryanheise.audioservice.AudioService"
|
||||||
android:foregroundServiceType="mediaPlayback"
|
|
||||||
android:exported="true"
|
android:exported="true"
|
||||||
|
android:foregroundServiceType="mediaPlayback"
|
||||||
tools:ignore="Instantiatable">
|
tools:ignore="Instantiatable">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.media.browse.MediaBrowserService" />
|
<action android:name="android.media.browse.MediaBrowserService" />
|
||||||
@@ -177,7 +219,7 @@
|
|||||||
|
|
||||||
<activity
|
<activity
|
||||||
android:name="com.yalantis.ucrop.UCropActivity"
|
android:name="com.yalantis.ucrop.UCropActivity"
|
||||||
android:theme="@style/Ucrop.CropTheme"/>
|
android:theme="@style/Ucrop.CropTheme" />
|
||||||
|
|
||||||
<receiver
|
<receiver
|
||||||
android:name="com.ryanheise.audioservice.MediaButtonReceiver"
|
android:name="com.ryanheise.audioservice.MediaButtonReceiver"
|
||||||
@@ -193,16 +235,21 @@
|
|||||||
android:name="flutterEmbedding"
|
android:name="flutterEmbedding"
|
||||||
android:value="2" />
|
android:value="2" />
|
||||||
</application>
|
</application>
|
||||||
|
|
||||||
<uses-permission android:name="android.permission.INTERNET" />
|
<uses-permission android:name="android.permission.INTERNET" />
|
||||||
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>
|
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
|
||||||
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
|
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
|
||||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32"/>
|
<uses-permission
|
||||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="28"/>
|
android:name="android.permission.READ_EXTERNAL_STORAGE"
|
||||||
<uses-permission android:name="android.permission.WAKE_LOCK"/>
|
android:maxSdkVersion="32" />
|
||||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
|
<uses-permission
|
||||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK"/>
|
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
|
||||||
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
|
android:maxSdkVersion="28" />
|
||||||
|
<uses-permission android:name="android.permission.WAKE_LOCK" />
|
||||||
|
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
||||||
|
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />
|
||||||
|
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
||||||
<!--
|
<!--
|
||||||
Media access permissions.
|
Media access permissions.
|
||||||
Android 13 or higher.
|
Android 13 or higher.
|
||||||
@@ -210,4 +257,5 @@
|
|||||||
-->
|
-->
|
||||||
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
|
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
|
||||||
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
|
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
|
||||||
|
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
|
||||||
</manifest>
|
</manifest>
|
||||||
|
|||||||
@@ -0,0 +1,272 @@
|
|||||||
|
package com.example.piliplus;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
|
import android.app.PendingIntent;
|
||||||
|
import android.app.PictureInPictureParams;
|
||||||
|
import android.app.RemoteAction;
|
||||||
|
import android.app.SearchManager;
|
||||||
|
import android.content.ComponentName;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.content.pm.PackageManager;
|
||||||
|
import android.content.pm.ShortcutInfo;
|
||||||
|
import android.content.pm.ShortcutManager;
|
||||||
|
import android.graphics.Bitmap;
|
||||||
|
import android.graphics.BitmapFactory;
|
||||||
|
import android.graphics.Point;
|
||||||
|
import android.graphics.Rect;
|
||||||
|
import android.graphics.drawable.Icon;
|
||||||
|
import android.media.session.PlaybackState;
|
||||||
|
import android.net.Uri;
|
||||||
|
import android.os.Build;
|
||||||
|
import android.provider.MediaStore;
|
||||||
|
import android.provider.Settings;
|
||||||
|
import android.util.Rational;
|
||||||
|
import android.view.WindowManager;
|
||||||
|
|
||||||
|
import androidx.annotation.DrawableRes;
|
||||||
|
import androidx.annotation.Keep;
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.annotation.RequiresApi;
|
||||||
|
|
||||||
|
import com.github.dart_lang.jni_flutter.JniFlutterPlugin;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
@Keep
|
||||||
|
public final class AndroidHelper {
|
||||||
|
public static final boolean isFoldable;
|
||||||
|
|
||||||
|
public static final boolean isPipAvailable;
|
||||||
|
|
||||||
|
public static volatile boolean isPipMode = false;
|
||||||
|
|
||||||
|
static {
|
||||||
|
PackageManager pm = getContext().getPackageManager();
|
||||||
|
isFoldable = Build.VERSION.SDK_INT >= Build.VERSION_CODES.R && pm.hasSystemFeature(PackageManager.FEATURE_SENSOR_HINGE_ANGLE);
|
||||||
|
isPipAvailable = pm.hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
private AndroidHelper() {
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Context getContext() {
|
||||||
|
return JniFlutterPlugin.getApplicationContext();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int sdkInt() {
|
||||||
|
return Build.VERSION.SDK_INT;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void back() {
|
||||||
|
Intent intent = new Intent(Intent.ACTION_MAIN);
|
||||||
|
intent.addCategory(Intent.CATEGORY_HOME);
|
||||||
|
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||||
|
getContext().startActivity(intent);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void biliSendCommAntifraud(
|
||||||
|
int action, long oid, int type, long rpId, long root, long parent, long ctime, @NonNull String commentText,
|
||||||
|
String pictures, @NonNull String sourceId, long uid, @NonNull String cookie
|
||||||
|
) {
|
||||||
|
Intent intent = new Intent();
|
||||||
|
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||||
|
intent.setComponent(new ComponentName(
|
||||||
|
"icu.freedomIntrovert.biliSendCommAntifraud",
|
||||||
|
"icu.freedomIntrovert.biliSendCommAntifraud.ByXposedLaunchedActivity"
|
||||||
|
));
|
||||||
|
intent.putExtra("action", action);
|
||||||
|
intent.putExtra("oid", oid);
|
||||||
|
intent.putExtra("type", type);
|
||||||
|
intent.putExtra("rpid", rpId);
|
||||||
|
intent.putExtra("root", root);
|
||||||
|
intent.putExtra("parent", parent);
|
||||||
|
intent.putExtra("ctime", ctime);
|
||||||
|
intent.putExtra("comment_text", commentText);
|
||||||
|
if (pictures != null) {
|
||||||
|
intent.putExtra("pictures", pictures);
|
||||||
|
}
|
||||||
|
intent.putExtra("source_id", sourceId);
|
||||||
|
intent.putExtra("uid", uid);
|
||||||
|
ArrayList<String> cookiesList = new ArrayList<>(1);
|
||||||
|
cookiesList.add(cookie);
|
||||||
|
intent.putStringArrayListExtra("cookies", cookiesList);
|
||||||
|
getContext().startActivity(intent);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void openLinkVerifySettings() {
|
||||||
|
Context context = getContext();
|
||||||
|
Uri uri = Uri.parse("package:" + context.getPackageName());
|
||||||
|
try {
|
||||||
|
Intent intent;
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
|
||||||
|
intent = new Intent(Settings.ACTION_APP_OPEN_BY_DEFAULT_SETTINGS, uri);
|
||||||
|
} else {
|
||||||
|
intent = new Intent(Intent.ACTION_MAIN, uri);
|
||||||
|
intent.setClassName(
|
||||||
|
"com.android.settings",
|
||||||
|
"com.android.settings.applications.InstalledAppOpenByDefaultActivity"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||||
|
context.startActivity(intent);
|
||||||
|
} catch (Exception ignored) {
|
||||||
|
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS, uri);
|
||||||
|
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||||
|
context.startActivity(intent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean openMusic(@NonNull String title, String artist, String album) {
|
||||||
|
Intent intent = new Intent(MediaStore.INTENT_ACTION_MEDIA_SEARCH);
|
||||||
|
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||||
|
intent.putExtra(SearchManager.QUERY, title);
|
||||||
|
intent.putExtra(MediaStore.EXTRA_MEDIA_TITLE, title);
|
||||||
|
if (artist != null) {
|
||||||
|
intent.putExtra(MediaStore.EXTRA_MEDIA_ARTIST, artist);
|
||||||
|
}
|
||||||
|
if (album != null) {
|
||||||
|
intent.putExtra(MediaStore.EXTRA_MEDIA_ALBUM, album);
|
||||||
|
}
|
||||||
|
intent.addCategory(Intent.CATEGORY_DEFAULT);
|
||||||
|
|
||||||
|
Context context = getContext();
|
||||||
|
PackageManager pm = context.getPackageManager();
|
||||||
|
|
||||||
|
try {
|
||||||
|
if (pm.resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY) != null) {
|
||||||
|
context.startActivity(intent);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
} catch (Exception ignored) {
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
intent.setAction(MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH);
|
||||||
|
if (pm.resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY) != null) {
|
||||||
|
context.startActivity(intent);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
} catch (Exception ignored) {
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void enterPip(long engineId, int width, int height, boolean autoEnter, boolean isLive, boolean isPlaying) {
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||||
|
Activity activity = JniFlutterPlugin.getActivity(engineId);
|
||||||
|
assert activity != null;
|
||||||
|
PictureInPictureParams.Builder builder = new PictureInPictureParams.Builder()
|
||||||
|
.setAspectRatio(new Rational(width, height));
|
||||||
|
setPipActions(activity, builder, isLive, isPlaying);
|
||||||
|
if (autoEnter) {
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
|
||||||
|
builder.setAutoEnterEnabled(true);
|
||||||
|
activity.setPictureInPictureParams(builder.build());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
activity.enterPictureInPictureMode(builder.build());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequiresApi(api = Build.VERSION_CODES.O)
|
||||||
|
public static void updatePipActions(long engineId, boolean isLive, boolean isPlaying) {
|
||||||
|
Activity activity = JniFlutterPlugin.getActivity(engineId);
|
||||||
|
assert activity != null;
|
||||||
|
PictureInPictureParams.Builder builder = new PictureInPictureParams.Builder();
|
||||||
|
setPipActions(activity, builder, isLive, isPlaying);
|
||||||
|
activity.setPictureInPictureParams(builder.build());
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequiresApi(api = Build.VERSION_CODES.O)
|
||||||
|
private static void setPipActions(Activity activity, PictureInPictureParams.Builder builder, boolean isLive, boolean isPlaying) {
|
||||||
|
ComponentName mbrComponent = MediaHelper.getMediaButtonReceiverComponent(activity);
|
||||||
|
if (mbrComponent == null) return;
|
||||||
|
ArrayList<RemoteAction> actionList = new ArrayList<>(3);
|
||||||
|
if (!isLive) {
|
||||||
|
actionList.add(getRemoteAction(mbrComponent, activity, R.drawable.ic_player_rewind_10s, "ACTION_REWIND", (int) PlaybackState.ACTION_REWIND));
|
||||||
|
}
|
||||||
|
if (isPlaying) {
|
||||||
|
actionList.add(getRemoteAction(mbrComponent, activity, R.drawable.ic_player_pause, "ACTION_PAUSE", (int) PlaybackState.ACTION_PAUSE));
|
||||||
|
} else {
|
||||||
|
actionList.add(getRemoteAction(mbrComponent, activity, R.drawable.ic_player_play, "ACTION_PLAY", (int) PlaybackState.ACTION_PLAY));
|
||||||
|
}
|
||||||
|
if (!isLive) {
|
||||||
|
actionList.add(getRemoteAction(mbrComponent, activity, R.drawable.ic_player_fast_forward_10s, "ACTION_FAST_FORWARD", (int) PlaybackState.ACTION_FAST_FORWARD));
|
||||||
|
}
|
||||||
|
builder.setActions(actionList);
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequiresApi(api = Build.VERSION_CODES.O)
|
||||||
|
private static RemoteAction getRemoteAction(@NonNull ComponentName mbrComponent, Activity activity, @DrawableRes int resId, String title, int action) {
|
||||||
|
return new RemoteAction(
|
||||||
|
Icon.createWithResource(activity, resId),
|
||||||
|
title,
|
||||||
|
title,
|
||||||
|
Objects.requireNonNull(MediaHelper.buildMediaButtonPendingIntent(activity, mbrComponent, action))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void disableAutoEnterPip(long engineId) {
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
|
||||||
|
Activity activity = JniFlutterPlugin.getActivity(engineId);
|
||||||
|
if (activity != null) {
|
||||||
|
activity.setPictureInPictureParams(new PictureInPictureParams.Builder()
|
||||||
|
.setAutoEnterEnabled(false)
|
||||||
|
.build()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int[] maxScreenSize() {
|
||||||
|
Context context = getContext();
|
||||||
|
WindowManager wm = context.getSystemService(WindowManager.class);
|
||||||
|
try {
|
||||||
|
float density = context.getResources().getDisplayMetrics().density;
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
|
||||||
|
Rect maxBounds = wm.getMaximumWindowMetrics().getBounds();
|
||||||
|
return new int[]{Math.round(maxBounds.width() / density), Math.round(maxBounds.height() / density)};
|
||||||
|
} else {
|
||||||
|
Point realSize = new Point();
|
||||||
|
wm.getDefaultDisplay().getRealSize(realSize);
|
||||||
|
return new int[]{Math.round(realSize.x / density), Math.round(realSize.y / density)};
|
||||||
|
}
|
||||||
|
} catch (Exception ignored) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void createShortcut(@NonNull String id, @NonNull String uri, @NonNull String label, @NonNull String icon) {
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||||
|
Context context = getContext();
|
||||||
|
ShortcutManager shortcutManager = context.getSystemService(ShortcutManager.class);
|
||||||
|
if (shortcutManager != null && shortcutManager.isRequestPinShortcutSupported()) {
|
||||||
|
Bitmap bitmap = BitmapFactory.decodeFile(icon);
|
||||||
|
ShortcutInfo shortcut = new ShortcutInfo.Builder(context, id)
|
||||||
|
.setShortLabel(label)
|
||||||
|
.setIcon(Icon.createWithAdaptiveBitmap(bitmap))
|
||||||
|
.setIntent(new Intent(Intent.ACTION_VIEW, Uri.parse(uri)))
|
||||||
|
.build();
|
||||||
|
// TODO: WorkerThread
|
||||||
|
Intent pinIntent = shortcutManager.createShortcutResultIntent(shortcut);
|
||||||
|
PendingIntent pendingIntent = PendingIntent.getBroadcast(
|
||||||
|
context, 0, pinIntent, PendingIntent.FLAG_IMMUTABLE
|
||||||
|
);
|
||||||
|
shortcutManager.requestPinShortcut(shortcut, pendingIntent.getIntentSender());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Keep
|
||||||
|
public static final class ToDart {
|
||||||
|
public static volatile Runnable onUserLeaveHint;
|
||||||
|
public static Runnable onConfigurationChanged;
|
||||||
|
|
||||||
|
private ToDart() {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,83 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2018 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.example.piliplus;
|
||||||
|
|
||||||
|
import android.app.PendingIntent;
|
||||||
|
import android.content.ComponentName;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.content.pm.PackageManager;
|
||||||
|
import android.content.pm.ResolveInfo;
|
||||||
|
import android.media.session.PlaybackState;
|
||||||
|
import android.os.Build;
|
||||||
|
import android.util.Log;
|
||||||
|
import android.view.KeyEvent;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
class MediaHelper {
|
||||||
|
private static final String TAG = "MediaButtonReceiver";
|
||||||
|
|
||||||
|
static PendingIntent buildMediaButtonPendingIntent(Context context, ComponentName mbrComponent, int action) {
|
||||||
|
if (mbrComponent == null) {
|
||||||
|
Log.w(TAG, "The component name of media button receiver should be provided.");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
int keyCode = PlaybackStateCompat_toKeyCode(action);
|
||||||
|
if (keyCode == KeyEvent.KEYCODE_UNKNOWN) {
|
||||||
|
Log.w(TAG,
|
||||||
|
"Cannot build a media button pending intent with the given action: " + action);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
Intent intent = new Intent(Intent.ACTION_MEDIA_BUTTON);
|
||||||
|
intent.setComponent(mbrComponent);
|
||||||
|
intent.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_DOWN, keyCode));
|
||||||
|
intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
|
||||||
|
return PendingIntent.getBroadcast(context, keyCode, intent,
|
||||||
|
Build.VERSION.SDK_INT >= Build.VERSION_CODES.S ? PendingIntent.FLAG_MUTABLE : 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static int PlaybackStateCompat_toKeyCode(int action) {
|
||||||
|
return switch (action) {
|
||||||
|
case (int) PlaybackState.ACTION_STOP -> KeyEvent.KEYCODE_MEDIA_STOP;
|
||||||
|
case (int) PlaybackState.ACTION_PAUSE -> KeyEvent.KEYCODE_MEDIA_PAUSE;
|
||||||
|
case (int) PlaybackState.ACTION_PLAY -> KeyEvent.KEYCODE_MEDIA_PLAY;
|
||||||
|
case (int) PlaybackState.ACTION_REWIND -> KeyEvent.KEYCODE_MEDIA_REWIND;
|
||||||
|
case (int) PlaybackState.ACTION_SKIP_TO_PREVIOUS -> KeyEvent.KEYCODE_MEDIA_PREVIOUS;
|
||||||
|
case (int) PlaybackState.ACTION_SKIP_TO_NEXT -> KeyEvent.KEYCODE_MEDIA_NEXT;
|
||||||
|
case (int) PlaybackState.ACTION_FAST_FORWARD -> KeyEvent.KEYCODE_MEDIA_FAST_FORWARD;
|
||||||
|
case (int) PlaybackState.ACTION_PLAY_PAUSE -> KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE;
|
||||||
|
default -> KeyEvent.KEYCODE_UNKNOWN;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
static ComponentName getMediaButtonReceiverComponent(Context context) {
|
||||||
|
Intent queryIntent = new Intent(Intent.ACTION_MEDIA_BUTTON);
|
||||||
|
queryIntent.setPackage(context.getPackageName());
|
||||||
|
PackageManager pm = context.getPackageManager();
|
||||||
|
List<ResolveInfo> resolveInfos = pm.queryBroadcastReceivers(queryIntent, 0);
|
||||||
|
if (resolveInfos.size() == 1) {
|
||||||
|
ResolveInfo resolveInfo = resolveInfos.get(0);
|
||||||
|
return new ComponentName(resolveInfo.activityInfo.packageName,
|
||||||
|
resolveInfo.activityInfo.name);
|
||||||
|
} else if (resolveInfos.size() > 1) {
|
||||||
|
Log.w(TAG, "More than one BroadcastReceiver that handles "
|
||||||
|
+ Intent.ACTION_MEDIA_BUTTON + " was found, returning null.");
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,129 +1,20 @@
|
|||||||
package com.example.piliplus
|
package com.example.piliplus
|
||||||
|
|
||||||
import android.app.PictureInPictureParams
|
|
||||||
import android.app.SearchManager
|
|
||||||
import android.content.ComponentName
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.pm.PackageManager
|
|
||||||
import android.content.res.Configuration
|
import android.content.res.Configuration
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.provider.MediaStore
|
|
||||||
import android.provider.Settings
|
|
||||||
import android.view.WindowManager.LayoutParams
|
import android.view.WindowManager.LayoutParams
|
||||||
import androidx.core.net.toUri
|
|
||||||
import com.ryanheise.audioservice.AudioServiceActivity
|
import com.ryanheise.audioservice.AudioServiceActivity
|
||||||
import io.flutter.embedding.engine.FlutterEngine
|
|
||||||
import io.flutter.plugin.common.MethodChannel
|
|
||||||
import kotlin.system.exitProcess
|
|
||||||
|
|
||||||
class MainActivity : AudioServiceActivity() {
|
class MainActivity : AudioServiceActivity() {
|
||||||
private lateinit var methodChannel: MethodChannel
|
override fun onConfigurationChanged(newConfig: Configuration) {
|
||||||
|
super.onConfigurationChanged(newConfig)
|
||||||
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
|
if (AndroidHelper.isFoldable) {
|
||||||
super.configureFlutterEngine(flutterEngine)
|
AndroidHelper.ToDart.onConfigurationChanged?.run()
|
||||||
|
|
||||||
methodChannel = MethodChannel(flutterEngine.dartExecutor.binaryMessenger, "PiliPlus")
|
|
||||||
methodChannel.setMethodCallHandler { call, result ->
|
|
||||||
when (call.method) {
|
|
||||||
"back" -> back();
|
|
||||||
"biliSendCommAntifraud" -> {
|
|
||||||
try {
|
|
||||||
val action = call.argument<Int>("action") ?: 0
|
|
||||||
val oid = call.argument<Number>("oid") ?: 0L
|
|
||||||
val type = call.argument<Int>("type") ?: 0
|
|
||||||
val rpid = call.argument<Number>("rpid") ?: 0L
|
|
||||||
val root = call.argument<Number>("root") ?: 0L
|
|
||||||
val parent = call.argument<Number>("parent") ?: 0L
|
|
||||||
val ctime = call.argument<Number>("ctime") ?: 0L
|
|
||||||
val commentText = call.argument<String>("comment_text") ?: ""
|
|
||||||
val pictures = call.argument<String?>("pictures")
|
|
||||||
val sourceId = call.argument<String>("source_id") ?: ""
|
|
||||||
val uid = call.argument<Number>("uid") ?: 0L
|
|
||||||
val cookies = call.argument<List<String>>("cookies") ?: emptyList<String>()
|
|
||||||
|
|
||||||
val intent = Intent().apply {
|
|
||||||
component = ComponentName("icu.freedomIntrovert.biliSendCommAntifraud", "icu.freedomIntrovert.biliSendCommAntifraud.ByXposedLaunchedActivity")
|
|
||||||
putExtra("action", action)
|
|
||||||
putExtra("oid", oid.toLong())
|
|
||||||
putExtra("type", type)
|
|
||||||
putExtra("rpid", rpid.toLong())
|
|
||||||
putExtra("root", root.toLong())
|
|
||||||
putExtra("parent", parent.toLong())
|
|
||||||
putExtra("ctime", ctime.toLong())
|
|
||||||
putExtra("comment_text", commentText)
|
|
||||||
if(pictures != null)
|
|
||||||
putExtra("pictures", pictures)
|
|
||||||
putExtra("source_id", sourceId)
|
|
||||||
putExtra("uid", uid.toLong())
|
|
||||||
putStringArrayListExtra("cookies", ArrayList(cookies))
|
|
||||||
}
|
|
||||||
startActivity(intent)
|
|
||||||
} catch (_: Exception) {}
|
|
||||||
}
|
|
||||||
"linkVerifySettings" -> {
|
|
||||||
val uri = ("package:" + context.packageName).toUri()
|
|
||||||
try {
|
|
||||||
val intent = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
|
|
||||||
Intent(Settings.ACTION_APP_OPEN_BY_DEFAULT_SETTINGS, uri)
|
|
||||||
} else {
|
|
||||||
Intent("android.intent.action.MAIN", uri).setClassName("com.android.settings",
|
|
||||||
"com.android.settings.applications.InstalledAppOpenByDefaultActivity")
|
|
||||||
}
|
|
||||||
context.startActivity(intent)
|
|
||||||
} catch (_: Throwable) {
|
|
||||||
val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS, uri)
|
|
||||||
context.startActivity(intent)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
"music" -> {
|
|
||||||
val title = call.argument<String>("title")
|
|
||||||
val intent = Intent(MediaStore.INTENT_ACTION_MEDIA_SEARCH).apply {
|
|
||||||
putExtra(SearchManager.QUERY, title)
|
|
||||||
putExtra(MediaStore.EXTRA_MEDIA_TITLE, title)
|
|
||||||
call.argument<String?>("artist")?.let { putExtra(MediaStore.EXTRA_MEDIA_ARTIST, it) }
|
|
||||||
call.argument<String?>("album")?.let { putExtra(MediaStore.EXTRA_MEDIA_ALBUM, it) }
|
|
||||||
|
|
||||||
addCategory(Intent.CATEGORY_DEFAULT)
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
if (packageManager.resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY) != null) {
|
|
||||||
startActivity(intent)
|
|
||||||
result.success(true)
|
|
||||||
return@setMethodCallHandler
|
|
||||||
}
|
|
||||||
} catch (_: Throwable) {}
|
|
||||||
try {
|
|
||||||
intent.action = MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH
|
|
||||||
if (packageManager.resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY) != null) {
|
|
||||||
startActivity(intent)
|
|
||||||
result.success(true)
|
|
||||||
return@setMethodCallHandler
|
|
||||||
}
|
|
||||||
} catch (_: Throwable) {}
|
|
||||||
result.success(false)
|
|
||||||
}
|
|
||||||
"setPipAutoEnterEnabled" -> {
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
|
|
||||||
val params = PictureInPictureParams.Builder()
|
|
||||||
.setAutoEnterEnabled(call.argument<Boolean>("autoEnable") ?: false)
|
|
||||||
.build()
|
|
||||||
setPictureInPictureParams(params)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else -> result.notImplemented()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun back() {
|
|
||||||
val intent = Intent(Intent.ACTION_MAIN).apply {
|
|
||||||
addCategory(Intent.CATEGORY_HOME)
|
|
||||||
flags = Intent.FLAG_ACTIVITY_NEW_TASK
|
|
||||||
}
|
|
||||||
startActivity(intent)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
|
||||||
@@ -133,21 +24,17 @@ class MainActivity : AudioServiceActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onDestroy() {
|
override fun onDestroy() {
|
||||||
|
stopService(Intent(this, com.ryanheise.audioservice.AudioService::class.java))
|
||||||
super.onDestroy()
|
super.onDestroy()
|
||||||
android.os.Process.killProcess(android.os.Process.myPid())
|
|
||||||
exitProcess(0)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onUserLeaveHint() {
|
override fun onUserLeaveHint() {
|
||||||
super.onUserLeaveHint()
|
super.onUserLeaveHint()
|
||||||
methodChannel.invokeMethod("onUserLeaveHint", null)
|
AndroidHelper.ToDart.onUserLeaveHint?.run()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onPictureInPictureModeChanged(isInPictureInPictureMode: Boolean, newConfig: Configuration?) {
|
override fun onPictureInPictureModeChanged(isInPictureInPictureMode: Boolean, newConfig: Configuration?) {
|
||||||
super.onPictureInPictureModeChanged(isInPictureInPictureMode, newConfig)
|
super.onPictureInPictureModeChanged(isInPictureInPictureMode, newConfig)
|
||||||
MethodChannel(
|
AndroidHelper.isPipMode = isInPictureInPictureMode
|
||||||
flutterEngine!!.dartExecutor.binaryMessenger,
|
|
||||||
"floating"
|
|
||||||
).invokeMethod("onPipChanged", isInPictureInPictureMode)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +0,0 @@
|
|||||||
<vector android:height="24dp" android:tint="#FFFFFF"
|
|
||||||
android:viewportHeight="24" android:viewportWidth="24"
|
|
||||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
|
||||||
<path android:fillColor="@android:color/white" android:pathData="M18,13c0,3.31 -2.69,6 -6,6s-6,-2.69 -6,-6s2.69,-6 6,-6v4l5,-5l-5,-5v4c-4.42,0 -8,3.58 -8,8c0,4.42 3.58,8 8,8s8,-3.58 8,-8H18z"/>
|
|
||||||
<path android:fillColor="@android:color/white" android:pathData="M10.86,15.94l0,-4.27l-0.09,0l-1.77,0.63l0,0.69l1.01,-0.31l0,3.26z"/>
|
|
||||||
<path android:fillColor="@android:color/white" android:pathData="M12.25,13.44v0.74c0,1.9 1.31,1.82 1.44,1.82c0.14,0 1.44,0.09 1.44,-1.82v-0.74c0,-1.9 -1.31,-1.82 -1.44,-1.82C13.55,11.62 12.25,11.53 12.25,13.44zM14.29,13.32v0.97c0,0.77 -0.21,1.03 -0.59,1.03c-0.38,0 -0.6,-0.26 -0.6,-1.03v-0.97c0,-0.75 0.22,-1.01 0.59,-1.01C14.07,12.3 14.29,12.57 14.29,13.32z"/>
|
|
||||||
</vector>
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
<vector android:height="24dp" android:tint="#FFFFFF"
|
|
||||||
android:viewportHeight="24" android:viewportWidth="24"
|
|
||||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
|
||||||
<path android:fillColor="@android:color/white" android:pathData="M11.99,5V1l-5,5l5,5V7c3.31,0 6,2.69 6,6s-2.69,6 -6,6s-6,-2.69 -6,-6h-2c0,4.42 3.58,8 8,8s8,-3.58 8,-8S16.41,5 11.99,5z"/>
|
|
||||||
<path android:fillColor="@android:color/white" android:pathData="M10.89,16h-0.85v-3.26l-1.01,0.31v-0.69l1.77,-0.63h0.09V16z"/>
|
|
||||||
<path android:fillColor="@android:color/white" android:pathData="M15.17,14.24c0,0.32 -0.03,0.6 -0.1,0.82s-0.17,0.42 -0.29,0.57s-0.28,0.26 -0.45,0.33s-0.37,0.1 -0.59,0.1s-0.41,-0.03 -0.59,-0.1s-0.33,-0.18 -0.46,-0.33s-0.23,-0.34 -0.3,-0.57s-0.11,-0.5 -0.11,-0.82V13.5c0,-0.32 0.03,-0.6 0.1,-0.82s0.17,-0.42 0.29,-0.57s0.28,-0.26 0.45,-0.33s0.37,-0.1 0.59,-0.1s0.41,0.03 0.59,0.1c0.18,0.07 0.33,0.18 0.46,0.33s0.23,0.34 0.3,0.57s0.11,0.5 0.11,0.82V14.24zM14.32,13.38c0,-0.19 -0.01,-0.35 -0.04,-0.48s-0.07,-0.23 -0.12,-0.31s-0.11,-0.14 -0.19,-0.17s-0.16,-0.05 -0.25,-0.05s-0.18,0.02 -0.25,0.05s-0.14,0.09 -0.19,0.17s-0.09,0.18 -0.12,0.31s-0.04,0.29 -0.04,0.48v0.97c0,0.19 0.01,0.35 0.04,0.48s0.07,0.24 0.12,0.32s0.11,0.14 0.19,0.17s0.16,0.05 0.25,0.05s0.18,-0.02 0.25,-0.05s0.14,-0.09 0.19,-0.17s0.09,-0.19 0.11,-0.32s0.04,-0.29 0.04,-0.48V13.38z"/>
|
|
||||||
</vector>
|
|
||||||
@@ -6,7 +6,6 @@
|
|||||||
android:viewportHeight="108.0">
|
android:viewportHeight="108.0">
|
||||||
<path
|
<path
|
||||||
android:fillColor="#FF5CB67B"
|
android:fillColor="#FF5CB67B"
|
||||||
android:pathData="M57.54,54L28.82,54l3.93,-19.36h24.78c5.35,0 9.68,4.33 9.68,9.68 0,5.35 -4.33,9.68 -9.68,9.68zM57.54,21.73L40.5,21.73L27.88,86.27h13.3l3.83,-19.36h12.54c12.48,0 22.59,-10.11 22.59,-22.59 0,-12.48 -10.11,-22.59 -22.59,-22.59z"
|
android:pathData="m58.52,54h-36.71l5.03,-24.75h31.68c6.83,0 12.37,5.54 12.37,12.37 0,6.83 -5.54,12.37 -12.37,12.37zM58.52,12.76h-21.77l-16.14,82.49h17l4.89,-24.75h16.02c15.95,0 28.87,-12.93 28.87,-28.87 0,-15.95 -12.92,-28.87 -28.87,-28.87z"
|
||||||
android:strokeWidth="0.252073"
|
|
||||||
android:fillType="evenOdd" />
|
android:fillType="evenOdd" />
|
||||||
</vector>
|
</vector>
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:height="24dp"
|
||||||
|
android:width="24dp"
|
||||||
|
android:viewportWidth="30.0"
|
||||||
|
android:viewportHeight="31.0">
|
||||||
|
<path
|
||||||
|
android:fillColor="#FFFFFFFF"
|
||||||
|
android:pathData="M23.5,11C23.423,10.894 23.325,10.803 23.213,10.734C23.101,10.666 22.976,10.62 22.846,10.599C22.716,10.579 22.583,10.584 22.455,10.615C22.327,10.646 22.206,10.702 22.1,10.78C21.89,10.929 21.745,11.154 21.697,11.408C21.648,11.661 21.699,11.924 21.84,12.14C22.788,13.456 23.296,15.038 23.29,16.66C23.278,17.713 23.059,18.754 22.644,19.722C22.229,20.69 21.627,21.567 20.873,22.302C20.118,23.037 19.226,23.615 18.248,24.004C17.269,24.394 16.223,24.586 15.17,24.57C14.112,24.593 13.06,24.405 12.075,24.018C11.09,23.631 10.191,23.053 9.431,22.316C8.671,21.579 8.065,20.699 7.648,19.727C7.231,18.754 7.01,17.708 7,16.65C7.021,14.61 7.82,12.655 9.234,11.184C10.649,9.714 12.572,8.84 14.61,8.74V10.62C14.607,10.732 14.634,10.843 14.69,10.94C14.738,11.02 14.812,11.08 14.9,11.11C14.969,11.144 15.044,11.161 15.12,11.161C15.196,11.161 15.271,11.144 15.34,11.11L20,8.3C20.102,8.244 20.187,8.161 20.247,8.061C20.307,7.961 20.339,7.847 20.34,7.73C20.342,7.613 20.311,7.497 20.251,7.397C20.191,7.296 20.104,7.214 20,7.16L15.34,4.38C15.209,4.298 15.052,4.269 14.9,4.3C14.815,4.319 14.738,4.365 14.68,4.43C14.62,4.511 14.588,4.609 14.59,4.71V6.79C12.03,6.895 9.608,7.978 7.824,9.817C6.039,11.655 5.029,14.108 5,16.67C5.037,19.33 6.127,21.868 8.032,23.725C9.936,25.583 12.5,26.61 15.16,26.58C17.82,26.61 20.384,25.583 22.288,23.725C24.193,21.868 25.283,19.33 25.32,16.67C25.316,14.637 24.68,12.656 23.5,11ZM11.77,20.77H12.67C12.71,20.771 12.749,20.765 12.786,20.75C12.823,20.736 12.857,20.713 12.885,20.685C12.913,20.657 12.935,20.624 12.95,20.587C12.965,20.55 12.971,20.51 12.97,20.47V13.14C12.971,13.1 12.965,13.061 12.95,13.024C12.935,12.987 12.913,12.953 12.885,12.925C12.857,12.897 12.823,12.875 12.786,12.86C12.749,12.846 12.71,12.839 12.67,12.84H12.08C11.963,12.838 11.847,12.862 11.74,12.91C11.495,13.029 11.049,13.285 10.63,13.526C10.52,13.59 10.412,13.652 10.31,13.71L9.81,14.01C9.764,14.031 9.725,14.066 9.7,14.11C9.681,14.189 9.681,14.271 9.7,14.35V15.3C9.693,15.33 9.693,15.361 9.7,15.39L9.76,15.44H9.82H9.92C10.158,15.327 10.348,15.229 10.525,15.139L10.525,15.139L10.525,15.139C10.659,15.07 10.786,15.005 10.92,14.94L11.33,14.72C11.349,14.71 11.369,14.705 11.39,14.705C11.411,14.705 11.432,14.71 11.45,14.72C11.459,14.737 11.463,14.756 11.463,14.775C11.463,14.794 11.459,14.813 11.45,14.83V20.47C11.45,20.511 11.458,20.552 11.475,20.59C11.491,20.628 11.515,20.662 11.545,20.69C11.575,20.718 11.61,20.74 11.649,20.753C11.688,20.767 11.729,20.773 11.77,20.77ZM15.952,12.977C16.339,12.772 16.772,12.67 17.21,12.68C17.66,12.661 18.108,12.759 18.509,12.964C18.91,13.169 19.252,13.474 19.5,13.85C20.039,14.737 20.3,15.764 20.25,16.8C20.302,17.837 20.041,18.865 19.5,19.75C19.255,20.12 18.92,20.422 18.527,20.627C18.133,20.831 17.694,20.933 17.25,20.92C16.806,20.937 16.365,20.838 15.97,20.633C15.575,20.428 15.241,20.124 15,19.75C14.437,18.872 14.158,17.842 14.2,16.8C14.16,15.758 14.439,14.729 15,13.85C15.238,13.482 15.566,13.182 15.952,12.977ZM17.94,19.4C18.176,19.215 18.353,18.965 18.45,18.68V18.69C18.654,18.081 18.752,17.442 18.74,16.8C18.763,16.163 18.675,15.527 18.48,14.92C18.38,14.637 18.208,14.385 17.98,14.19C17.76,14.04 17.501,13.96 17.235,13.96C16.969,13.96 16.709,14.04 16.49,14.19C16.259,14.381 16.089,14.634 16,14.92C15.791,15.521 15.693,16.154 15.71,16.79C15.683,17.431 15.771,18.071 15.97,18.68C16.056,18.964 16.227,19.216 16.46,19.4C16.674,19.565 16.94,19.65 17.21,19.64C17.474,19.648 17.732,19.563 17.94,19.4Z"
|
||||||
|
android:fillType="evenOdd" />
|
||||||
|
</vector>
|
||||||
11
android/app/src/main/res/drawable/ic_player_pause.xml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:height="24dp"
|
||||||
|
android:width="24dp"
|
||||||
|
android:viewportWidth="36.0"
|
||||||
|
android:viewportHeight="36.0">
|
||||||
|
<path
|
||||||
|
android:fillColor="#FFFFFFFF"
|
||||||
|
android:pathData="M13.402,8.296C13.402,6.887 12.259,5.744 10.849,5.744C9.439,5.744 8.296,6.887 8.296,8.296V27.442C8.296,28.852 9.439,29.995 10.849,29.995C12.259,29.995 13.402,28.852 13.402,27.442V8.296ZM27.442,8.296C27.442,6.887 26.299,5.744 24.889,5.744C23.479,5.744 22.337,6.887 22.337,8.296V27.442C22.337,28.852 23.479,29.995 24.889,29.995C26.299,29.995 27.442,28.852 27.442,27.442V8.296Z"
|
||||||
|
android:fillType="evenOdd" />
|
||||||
|
</vector>
|
||||||
10
android/app/src/main/res/drawable/ic_player_play.xml
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:height="24dp"
|
||||||
|
android:width="24dp"
|
||||||
|
android:viewportWidth="36.0"
|
||||||
|
android:viewportHeight="36.0">
|
||||||
|
<path
|
||||||
|
android:fillColor="#FFFFFFFF"
|
||||||
|
android:pathData="M29.436,21.035L13.449,31.028C12.545,31.592 11.356,31.318 10.791,30.414C10.599,30.108 10.498,29.754 10.498,29.392L10.498,8.317C10.498,7.252 11.361,6.389 12.427,6.389C12.788,6.389 13.142,6.49 13.449,6.682L29.436,16.674C30.641,17.427 31.007,19.013 30.254,20.218C30.047,20.549 29.767,20.829 29.436,21.035Z" />
|
||||||
|
</vector>
|
||||||
11
android/app/src/main/res/drawable/ic_player_rewind_10s.xml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:height="24dp"
|
||||||
|
android:width="24dp"
|
||||||
|
android:viewportWidth="31.0"
|
||||||
|
android:viewportHeight="31.0">
|
||||||
|
<path
|
||||||
|
android:fillColor="#FFFFFFFF"
|
||||||
|
android:pathData="M16.375,6.79V4.73C16.379,4.627 16.343,4.527 16.275,4.45C16.225,4.377 16.15,4.324 16.065,4.3C15.92,4.277 15.772,4.305 15.645,4.38L10.955,7.16C10.846,7.208 10.753,7.287 10.688,7.386C10.622,7.485 10.587,7.601 10.585,7.72C10.59,7.84 10.625,7.956 10.688,8.058C10.752,8.16 10.84,8.243 10.945,8.3L15.645,11.06C15.716,11.093 15.792,11.11 15.87,11.11C15.948,11.11 16.025,11.093 16.095,11.06C16.182,11.028 16.255,10.968 16.305,10.89C16.361,10.793 16.388,10.682 16.385,10.57V8.74C18.416,8.849 20.329,9.728 21.735,11.197C23.142,12.667 23.935,14.616 23.955,16.65C23.944,17.703 23.724,18.744 23.309,19.712C22.894,20.68 22.292,21.557 21.538,22.292C20.784,23.027 19.891,23.605 18.913,23.994C17.934,24.384 16.888,24.576 15.835,24.56C14.776,24.585 13.723,24.4 12.736,24.015C11.749,23.63 10.849,23.053 10.087,22.317C9.325,21.581 8.717,20.701 8.298,19.728C7.879,18.756 7.657,17.709 7.645,16.65C7.651,15.024 8.172,13.441 9.135,12.13C9.276,11.914 9.327,11.651 9.279,11.398C9.23,11.144 9.086,10.92 8.875,10.77C8.768,10.691 8.646,10.635 8.517,10.604C8.387,10.573 8.253,10.568 8.122,10.589C7.991,10.61 7.865,10.658 7.752,10.728C7.639,10.799 7.542,10.891 7.465,11C6.283,12.655 5.646,14.637 5.645,16.67C5.682,19.33 6.772,21.868 8.677,23.725C10.581,25.583 13.145,26.61 15.805,26.58C18.465,26.61 21.029,25.583 22.934,23.725C24.838,21.868 25.928,19.33 25.965,16.67C25.937,14.108 24.926,11.655 23.141,9.817C21.357,7.978 18.935,6.895 16.375,6.79ZM15.645,19.75C15.886,20.124 16.221,20.428 16.615,20.633C17.01,20.838 17.451,20.937 17.895,20.92C18.337,20.934 18.776,20.833 19.168,20.628C19.56,20.423 19.893,20.121 20.135,19.75C20.675,18.864 20.936,17.836 20.885,16.8C20.935,15.764 20.674,14.737 20.135,13.85C19.89,13.48 19.556,13.178 19.162,12.974C18.768,12.769 18.329,12.668 17.885,12.68C17.442,12.665 17.003,12.764 16.611,12.969C16.218,13.175 15.885,13.478 15.645,13.85C15.084,14.729 14.805,15.758 14.845,16.8C14.804,17.842 15.083,18.872 15.645,19.75ZM16.655,14.88C16.739,14.592 16.91,14.337 17.145,14.15C17.36,13.985 17.625,13.9 17.895,13.91C18.159,13.902 18.417,13.987 18.625,14.15C18.859,14.342 19.036,14.594 19.135,14.88C19.33,15.487 19.418,16.123 19.395,16.76C19.417,17.397 19.329,18.033 19.135,18.64C19.036,18.926 18.859,19.178 18.625,19.37C18.417,19.533 18.159,19.618 17.895,19.61C17.625,19.62 17.36,19.535 17.145,19.37C16.917,19.181 16.747,18.932 16.655,18.65C16.453,18.041 16.362,17.401 16.385,16.76C16.361,16.136 16.449,15.513 16.645,14.92L16.655,14.88ZM10.455,15.43H10.385L10.345,15.39C10.338,15.361 10.338,15.33 10.345,15.3V14.34C10.325,14.261 10.325,14.179 10.345,14.1C10.356,14.077 10.371,14.056 10.39,14.039C10.409,14.022 10.431,14.009 10.455,14L10.955,13.71C11.445,13.42 12.075,13.05 12.385,12.91C12.491,12.859 12.607,12.832 12.725,12.83H13.285C13.365,12.83 13.441,12.862 13.497,12.918C13.554,12.974 13.585,13.051 13.585,13.13V20.46C13.587,20.5 13.58,20.54 13.565,20.577C13.551,20.614 13.529,20.647 13.5,20.675C13.472,20.704 13.439,20.726 13.402,20.74C13.365,20.755 13.325,20.762 13.285,20.76H12.385C12.346,20.76 12.307,20.752 12.27,20.737C12.234,20.722 12.201,20.7 12.173,20.672C12.145,20.645 12.123,20.611 12.108,20.575C12.093,20.539 12.085,20.5 12.085,20.46V14.82C12.094,14.803 12.099,14.784 12.099,14.765C12.099,14.746 12.094,14.727 12.085,14.71C12.067,14.701 12.046,14.696 12.025,14.696C12.004,14.696 11.984,14.701 11.965,14.71L11.555,14.93L10.555,15.43H10.455Z"
|
||||||
|
android:fillType="evenOdd" />
|
||||||
|
</vector>
|
||||||
BIN
android/app/src/main/res/drawable/ic_shortcut_download.png
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
BIN
android/app/src/main/res/drawable/ic_shortcut_search.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
@@ -1,3 +1,5 @@
|
|||||||
<resources>
|
<resources>
|
||||||
<string name="app_name">PiliPlus</string>
|
<string name="app_name">PiliPlus</string>
|
||||||
|
<string name="search">搜索</string>
|
||||||
|
<string name="offline_video">离线视频</string>
|
||||||
</resources>
|
</resources>
|
||||||
20
android/app/src/main/res/xml-v25/shortcuts.xml
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<shortcut
|
||||||
|
android:icon="@drawable/ic_shortcut_search"
|
||||||
|
android:shortcutId="search"
|
||||||
|
android:shortcutLongLabel="@string/search"
|
||||||
|
android:shortcutShortLabel="@string/search">
|
||||||
|
<intent
|
||||||
|
android:action="com.example.piliplus.SHORTCUT"
|
||||||
|
android:data="bilibili://search" />
|
||||||
|
</shortcut>
|
||||||
|
<shortcut
|
||||||
|
android:icon="@drawable/ic_shortcut_download"
|
||||||
|
android:shortcutId="offline_video"
|
||||||
|
android:shortcutLongLabel="@string/offline_video"
|
||||||
|
android:shortcutShortLabel="@string/offline_video">
|
||||||
|
<intent
|
||||||
|
android:action="com.example.piliplus.SHORTCUT"
|
||||||
|
android:data="bilibili://download" />
|
||||||
|
</shortcut>
|
||||||
|
</shortcuts>
|
||||||
@@ -43,14 +43,14 @@ subprojects {
|
|||||||
val pluginCompileSdk = pluginCompileSdkStr
|
val pluginCompileSdk = pluginCompileSdkStr
|
||||||
?.removePrefix("android-")
|
?.removePrefix("android-")
|
||||||
?.toIntOrNull()
|
?.toIntOrNull()
|
||||||
if (pluginCompileSdk != null && pluginCompileSdk < 31) {
|
if (pluginCompileSdk != null && pluginCompileSdk < 36) {
|
||||||
project.logger.error(
|
project.logger.error(
|
||||||
"Warning: Overriding compileSdk version in Flutter plugin: ${project.name} " +
|
"Warning: Overriding compileSdk version in Flutter plugin: ${project.name} " +
|
||||||
"from $pluginCompileSdk to 31 (to work around https://issuetracker.google.com/issues/199180389).\n" +
|
"from $pluginCompileSdk to 36 (to work around https://issuetracker.google.com/issues/199180389).\n" +
|
||||||
"If there is not a new version of ${project.name}, consider filing an issue against ${project.name} " +
|
"If there is not a new version of ${project.name}, consider filing an issue against ${project.name} " +
|
||||||
"to increase their compileSdk to the latest (otherwise try updating to the latest version)."
|
"to increase their compileSdk to the latest (otherwise try updating to the latest version)."
|
||||||
)
|
)
|
||||||
androidExtension.setCompileSdkVersion(31)
|
androidExtension.setCompileSdkVersion(36)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError
|
org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError
|
||||||
android.useAndroidX=true
|
android.useAndroidX=true
|
||||||
android.enableJetifier=true
|
android.enableJetifier=true
|
||||||
|
android.builtInKotlin=false
|
||||||
|
android.newDsl=false
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
distributionUrl=https\://downloads.gradle.org/distributions/gradle-8.13-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-9.5.0-all.zip
|
||||||
networkTimeout=10000
|
networkTimeout=10000
|
||||||
validateDistributionUrl=true
|
validateDistributionUrl=true
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
|
|||||||
@@ -19,8 +19,8 @@ pluginManagement {
|
|||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
id("dev.flutter.flutter-plugin-loader") version "1.0.0"
|
id("dev.flutter.flutter-plugin-loader") version "1.0.0"
|
||||||
id("com.android.application") version "8.12.1" apply false
|
id("com.android.application") version "9.0.1" apply false
|
||||||
id("org.jetbrains.kotlin.android") version "2.2.0" apply false
|
id("org.jetbrains.kotlin.android") version "2.3.20" apply false
|
||||||
}
|
}
|
||||||
|
|
||||||
include(":app")
|
include(":app")
|
||||||
|
|||||||
@@ -1,3 +0,0 @@
|
|||||||
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M10 4.0625C7.85812 4.0625 5.98983 4.1725 4.67735 4.2798C3.77861 4.35327 3.08174 5.04067 3.00119 5.93221C2.90388 7.00924 2.8125 8.43727 2.8125 10C2.8125 11.5627 2.90388 12.9908 3.00119 14.0678C3.08174 14.9593 3.77861 15.6467 4.67735 15.7202C5.98983 15.8275 7.85812 15.9375 10 15.9375C12.1421 15.9375 14.0105 15.8275 15.323 15.7202C16.2216 15.6467 16.9184 14.9595 16.9989 14.0682C17.0962 12.9916 17.1875 11.5639 17.1875 10C17.1875 8.43614 17.0962 7.00837 16.9989 5.9318C16.9184 5.04049 16.2216 4.3533 15.323 4.27983C14.0105 4.17252 12.1421 4.0625 10 4.0625ZM4.5755 3.03395C5.9136 2.92456 7.81674 2.8125 10 2.8125C12.1835 2.8125 14.0868 2.92458 15.4249 3.03398C16.9228 3.15645 18.108 4.31588 18.2438 5.81931C18.3435 6.92296 18.4375 8.38948 18.4375 10C18.4375 11.6105 18.3435 13.077 18.2438 14.1807C18.108 15.6841 16.9228 16.8436 15.4249 16.966C14.0868 17.0754 12.1835 17.1875 10 17.1875C7.81674 17.1875 5.9136 17.0754 4.5755 16.966C3.07738 16.8436 1.8921 15.6838 1.75626 14.1803C1.65651 13.0762 1.5625 11.6094 1.5625 10C1.5625 8.39058 1.65651 6.92379 1.75626 5.81973C1.8921 4.31616 3.07738 3.15643 4.5755 3.03395ZM5 8.4375C5 8.09232 5.27982 7.8125 5.625 7.8125H5.9375C6.28268 7.8125 6.5625 8.09232 6.5625 8.4375C6.5625 8.78268 6.28268 9.0625 5.9375 9.0625H5.625C5.27982 9.0625 5 8.78268 5 8.4375ZM7.5 8.4375C7.5 8.09232 7.77982 7.8125 8.125 7.8125H13.125C13.4702 7.8125 13.75 8.09232 13.75 8.4375C13.75 8.78268 13.4702 9.0625 13.125 9.0625H8.125C7.77982 9.0625 7.5 8.78268 7.5 8.4375ZM6.875 10.9375C6.52982 10.9375 6.25 11.2173 6.25 11.5625C6.25 11.9077 6.52982 12.1875 6.875 12.1875H7.1875C7.53268 12.1875 7.8125 11.9077 7.8125 11.5625C7.8125 11.2173 7.53268 10.9375 7.1875 10.9375H6.875ZM9.375 10.9375C9.02982 10.9375 8.75 11.2173 8.75 11.5625C8.75 11.9077 9.02982 12.1875 9.375 12.1875H14.375C14.7202 12.1875 15 11.9077 15 11.5625C15 11.2173 14.7202 10.9375 14.375 10.9375H9.375Z" fill="#999"/>
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 172 KiB After Width: | Height: | Size: 172 KiB |
|
Before Width: | Height: | Size: 8.0 KiB |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 22"><path d="M17.982 9.275L8.06 3.27A2.013 2.013 0 005 4.994v12.011a2.017 2.017 0 003.06 1.725l9.922-6.005a2.017 2.017 0 000-3.45z"></path></svg>
|
|
||||||
|
Before Width: | Height: | Size: 201 B |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 22"><path d="M16.118 3.667h.382a3.667 3.667 0 013.667 3.667v7.333a3.667 3.667 0 01-3.667 3.667h-11a3.667 3.667 0 01-3.667-3.667V7.333A3.667 3.667 0 015.5 3.666h.382L4.95 2.053a1.1 1.1 0 011.906-1.1l1.567 2.714h5.156L15.146.953a1.101 1.101 0 011.906 1.1l-.934 1.614z" fill="#333" data-darkreader-inline-fill="" style="--darkreader-inline-fill:#c3beb7;"></path><path d="M5.561 5.194h10.878a2.2 2.2 0 012.2 2.2v7.211a2.2 2.2 0 01-2.2 2.2H5.561a2.2 2.2 0 01-2.2-2.2V7.394a2.2 2.2 0 012.2-2.2z" fill="#fff" data-darkreader-inline-fill="" style="--darkreader-inline-fill:#e1ded9;"></path><path d="M6.967 8.556a1.1 1.1 0 011.1 1.1v2.689a1.1 1.1 0 11-2.2 0V9.656a1.1 1.1 0 011.1-1.1zM15.033 8.556a1.1 1.1 0 011.1 1.1v2.689a1.1 1.1 0 11-2.2 0V9.656a1.1 1.1 0 011.1-1.1z" fill="#333" data-darkreader-inline-fill="" style="--darkreader-inline-fill:#c3beb7;"></path></svg>
|
|
||||||
|
Before Width: | Height: | Size: 916 B |
@@ -1 +0,0 @@
|
|||||||
<svg width="18" height="16" viewBox="0 0 18 16" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M9 2.0625C6.85812 2.0625 4.98983 2.1725 3.67735 2.2798C2.77861 2.35327 2.08174 3.04067 2.00119 3.93221C1.90388 5.00924 1.8125 6.43727 1.8125 8C1.8125 9.56273 1.90388 10.9908 2.00119 12.0678C2.08174 12.9593 2.77861 13.6467 3.67735 13.7202C4.98983 13.8275 6.85812 13.9375 9 13.9375C11.1421 13.9375 13.0105 13.8275 14.323 13.7202C15.2216 13.6467 15.9184 12.9595 15.9989 12.0682C16.0962 10.9916 16.1875 9.56386 16.1875 8C16.1875 6.43614 16.0962 5.00837 15.9989 3.9318C15.9184 3.04049 15.2216 2.3533 14.323 2.27983C13.0105 2.17252 11.1421 2.0625 9 2.0625ZM3.5755 1.03395C4.9136 0.924562 6.81674 0.8125 9 0.8125C11.1835 0.8125 13.0868 0.924583 14.4249 1.03398C15.9228 1.15645 17.108 2.31588 17.2438 3.81931C17.3435 4.92296 17.4375 6.38948 17.4375 8C17.4375 9.61052 17.3435 11.077 17.2438 12.1807C17.108 13.6841 15.9228 14.8436 14.4249 14.966C13.0868 15.0754 11.1835 15.1875 9 15.1875C6.81674 15.1875 4.9136 15.0754 3.5755 14.966C2.07738 14.8436 0.892104 13.6838 0.756256 12.1803C0.656505 11.0762 0.5625 9.60942 0.5625 8C0.5625 6.39058 0.656505 4.92379 0.756257 3.81973C0.892104 2.31616 2.07738 1.15643 3.5755 1.03395ZM4.41663 4.93726C4.72729 4.93726 4.97913 5.1891 4.97913 5.49976V8.62476C4.97913 9.34963 5.56675 9.93726 6.29163 9.93726C7.0165 9.93726 7.60413 9.34963 7.60413 8.62476V5.49976C7.60413 5.1891 7.85597 4.93726 8.16663 4.93726C8.47729 4.93726 8.72913 5.1891 8.72913 5.49976V8.62476C8.72913 9.97095 7.63782 11.0623 6.29163 11.0623C4.94543 11.0623 3.85413 9.97095 3.85413 8.62476V5.49976C3.85413 5.1891 4.10597 4.93726 4.41663 4.93726ZM10.2501 4.93726C9.9394 4.93726 9.68756 5.1891 9.68756 5.49976V10.4998C9.68756 10.8104 9.9394 11.0623 10.2501 11.0623C10.5607 11.0623 10.8126 10.8104 10.8126 10.4998V9.60392H12.2292C13.5179 9.60392 14.5626 8.55925 14.5626 7.27059C14.5626 5.98193 13.5179 4.93726 12.2292 4.93726H10.2501ZM12.2292 8.47892H10.8126V6.06226H12.2292C12.8966 6.06226 13.4376 6.60325 13.4376 7.27059C13.4376 7.93793 12.8966 8.47892 12.2292 8.47892Z" fill="#999"></path></svg>
|
|
||||||
|
Before Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 2.0 KiB |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" data-pointer="none" viewBox="0 0 24 24"><path fill-rule="evenodd" d="m8.085 4.891-.999-1.499a1.008 1.008 0 0 1 1.679-1.118l1.709 2.566c.54-.008 1.045-.012 1.515-.012h.13c.345 0 .707.003 1.088.007l1.862-2.59a1.008 1.008 0 0 1 1.637 1.177l-1.049 1.46c.788.02 1.631.046 2.53.078 1.958.069 3.468 1.6 3.74 3.507.088.613.13 2.158.16 3.276l.001.027c.01.333.017.63.025.856a.987.987 0 0 1-1.974.069c-.008-.23-.016-.539-.025-.881v-.002c-.028-1.103-.066-2.541-.142-3.065-.143-1.004-.895-1.78-1.854-1.813-2.444-.087-4.466-.13-6.064-.131-1.598 0-3.619.044-6.063.13a2.037 2.037 0 0 0-1.945 1.748c-.15 1.04-.225 2.341-.225 3.904 0 1.874.11 3.474.325 4.798.154.949.95 1.66 1.91 1.708a97.58 97.58 0 0 0 5.416.139.988.988 0 0 1 0 1.975c-2.196 0-3.61-.047-5.513-.141A4.012 4.012 0 0 1 2.197 17.7c-.236-1.446-.351-3.151-.351-5.116 0-1.64.08-3.035.245-4.184A4.013 4.013 0 0 1 5.92 4.96c.761-.027 1.483-.05 2.164-.069Zm4.436 4.707h-1.32v4.63h2.222v.848h-2.618v1.078h2.431a5.01 5.01 0 0 1 3.575-3.115V9.598h-1.276a8.59 8.59 0 0 0 .748-1.42l-1.089-.384a14.232 14.232 0 0 1-.814 1.804h-1.518l.693-.308a8.862 8.862 0 0 0-.814-1.408l-1.045.352c.297.396.572.847.825 1.364Zm-4.18 3.564.154-1.485h1.98V8.289h-3.2v.979h2.067v1.43H7.483l-.308 3.454h2.277c0 1.166-.044 1.925-.12 2.277-.078.352-.386.528-.936.528-.308 0-.616-.022-.902-.055l.297 1.067.062.004c.285.02.551.04.818.04 1.001-.066 1.562-.418 1.694-1.056.11-.638.176-1.903.176-3.795h-2.2Zm7.458.11v-.858h-1.254v.858H15.8Zm-2.376-.858v.858h-1.199v-.858h1.2Zm-1.199-.946h1.2v-.902h-1.2v.902Zm2.321 0v-.902H15.8v.902h-1.254Zm3.517 10.594a4 4 0 1 0 0-8 4 4 0 0 0 0 8Zm-.002-1.502a2.5 2.5 0 0 1-2.217-3.657l3.326 3.398a2.49 2.49 0 0 1-1.109.259Zm2.5-2.5c0 .42-.103.815-.286 1.162l-3.328-3.401a2.5 2.5 0 0 1 3.614 2.239Z" clip-rule="evenodd"></path></svg>
|
|
||||||
|
Before Width: | Height: | Size: 1.8 KiB |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" data-pointer="none" viewBox="0 0 24 24" id="svgcontent" overflow="visible" width="24" height="24" x="597" y="286"><g class="layer" style="pointer-events:all"><title style="pointer-events:inherit">Layer 1</title><path fill-rule="evenodd" d="M11.99,4.83C11.52,4.83 11.01,4.83 10.47,4.84L8.76,2.27A1.01,1.01 0 0 0 7.09,3.39L8.08,4.89C7.4,4.91 6.68,4.93 5.92,4.96A4.01,4.01 0 0 0 2.09,8.4C1.93,9.55 1.85,10.94 1.85,12.58C1.85,14.55 1.96,16.25 2.2,17.7A4.01,4.01 0 0 0 5.96,21.06L6.86,21.11C8.07,21.17 8.67,21.2 10.47,21.2A0.99,0.99 0 0 0 10.47,19.23C8.71,19.23 8.13,19.2 6.97,19.14L6.06,19.09A2.04,2.04 0 0 1 4.15,17.38C3.93,16.06 3.82,14.46 3.82,12.58C3.82,11.02 3.9,9.72 4.05,8.68C4.19,7.7 5.01,6.97 5.99,6.93C8.43,6.85 10.46,6.8 12.05,6.8C13.65,6.8 15.67,6.85 18.12,6.93C19.08,6.97 19.83,7.74 19.97,8.75C20.05,9.27 20.09,10.71 20.11,11.81L20.11,11.81C20.12,12.16 20.13,12.46 20.14,12.69A0.99,0.99 0 1 0 22.11,12.63C22.1,12.4 22.1,12.1 22.09,11.77L22.09,11.74C22.06,10.62 22.01,9.08 21.93,8.47C21.65,6.56 20.14,5.03 18.19,4.96C17.29,4.93 16.44,4.9 15.66,4.88L16.71,3.42A1.01,1.01 0 0 0 15.07,2.24L13.21,4.83C12.83,4.83 12.46,4.83 12.12,4.83L11.99,4.83zM12.51,9.6L11.19,9.6L11.19,14.23L13.41,14.23L13.41,15.08L10.79,15.08L10.79,16.16L13.41,16.16L13.42,16.84C13.78,16.86 14.13,17 14.43,17.24L14.54,17.24L14.54,16.16L17.23,16.16L17.23,15.08L14.53,15.08L14.53,14.23L16.8,14.23L16.8,9.6L15.52,9.6A8.59,8.59 0 0 0 16.27,8.18L15.18,7.8A14.23,14.23 0 0 1 14.37,9.6L12.85,9.6L13.54,9.3A8.86,8.86 0 0 0 12.73,7.89L11.68,8.24C11.98,8.64 12.26,9.09 12.51,9.6zM8.33,13.17L8.48,11.68L10.46,11.68L10.46,8.29L7.26,8.29L7.26,9.27L9.33,9.27L9.33,10.7L7.47,10.7L7.16,14.16L9.44,14.16C9.44,15.32 9.4,16.08 9.32,16.43C9.24,16.79 8.94,16.96 8.39,16.96C8.08,16.96 7.77,16.94 7.48,16.91L7.78,17.97L7.84,17.98C8.13,18 8.39,18.02 8.66,18.02C9.66,17.95 10.22,17.6 10.35,16.96C10.46,16.32 10.53,15.06 10.53,13.17L8.33,13.17zM15.79,13.28L15.79,12.42L14.53,12.42L14.53,13.28L15.79,13.28zM13.41,12.42L13.41,13.28L12.21,13.28L12.21,12.42L13.41,12.42zM12.21,11.47L13.41,11.47L13.41,10.57L12.21,10.57L12.21,11.47zM14.53,11.47L14.53,10.57L15.79,10.57L15.79,11.47L14.53,11.47z" clip-rule="evenodd" id="svg_1"></path><path fill="#000000" fill-rule="evenodd" d="M22.85,14.63A1,1 0 0 0 21.43,14.7L16.34,20.41L14.13,18.13L14.03,18.04L14.02,18.04A1,1 0 0 0 12.7,19.53L15.66,22.57L15.76,22.66L15.76,22.66C16.17,22.98 16.76,22.93 17.12,22.54L22.93,16.03L23.01,15.93L23.01,15.92A1,1 0 0 0 22.85,14.63z" clip-rule="evenodd" id="svg_2"></path></g></svg>
|
|
||||||
|
Before Width: | Height: | Size: 2.5 KiB |
@@ -1,3 +0,0 @@
|
|||||||
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M4.67735 4.2798C5.98983 4.1725 7.85812 4.0625 10 4.0625C12.1421 4.0625 14.0105 4.17252 15.323 4.27983C16.2216 4.3533 16.9184 5.04049 16.9989 5.9318C17.0962 7.00837 17.1875 8.43614 17.1875 10C17.1875 11.5639 17.0962 12.9916 16.9989 14.0682C16.9184 14.9595 16.2216 15.6467 15.323 15.7202C14.0105 15.8275 12.1421 15.9375 10 15.9375C7.85812 15.9375 5.98983 15.8275 4.67735 15.7202C3.77861 15.6467 3.08174 14.9593 3.00119 14.0678C2.90388 12.9908 2.8125 11.5627 2.8125 10C2.8125 8.43727 2.90388 7.00924 3.00119 5.93221C3.08174 5.04067 3.77861 4.35327 4.67735 4.2798ZM10 2.8125C7.81674 2.8125 5.9136 2.92456 4.5755 3.03395C3.07738 3.15643 1.8921 4.31616 1.75626 5.81973C1.65651 6.92379 1.5625 8.39058 1.5625 10C1.5625 11.6094 1.65651 13.0762 1.75626 14.1803C1.8921 15.6838 3.07738 16.8436 4.5755 16.966C5.9136 17.0754 7.81674 17.1875 10 17.1875C12.1835 17.1875 14.0868 17.0754 15.4249 16.966C16.9228 16.8436 18.108 15.6841 18.2438 14.1807C18.3435 13.077 18.4375 11.6105 18.4375 10C18.4375 8.38948 18.3435 6.92296 18.2438 5.81931C18.108 4.31588 16.9228 3.15645 15.4249 3.03398C14.0868 2.92458 12.1835 2.8125 10 2.8125ZM12.1876 10.722C12.7431 10.4013 12.7431 9.59941 12.1876 9.27866L9.06133 7.47373C8.50577 7.15298 7.81133 7.55392 7.81133 8.19542V11.8053C7.81133 12.4468 8.50577 12.8477 9.06133 12.527L12.1876 10.722Z" fill="#999"/>
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 1.2 KiB |
@@ -3,18 +3,18 @@
|
|||||||
ln -sf /opt/PiliPlus/piliplus /usr/bin/piliplus
|
ln -sf /opt/PiliPlus/piliplus /usr/bin/piliplus
|
||||||
chmod +x /usr/bin/piliplus
|
chmod +x /usr/bin/piliplus
|
||||||
|
|
||||||
if [ $1 == "config" ] && [ -x /usr/binupdate-mime-database ]; then
|
if [ $1 == "configure" ] && [ -x /usr/bin/update-mime-database ]; then
|
||||||
echo "updating mime database..."
|
echo "updating mime database..."
|
||||||
update-mime-database /usr/share/mime || true
|
update-mime-database /usr/share/mime || true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ $1 == "config" ] && [ -x /usr/bin/gtk-update-icon-cache ]; then
|
if [ $1 == "configure" ] && [ -x /usr/bin/gtk-update-icon-cache ]; then
|
||||||
echo "updating icon cache..."
|
echo "updating icon cache..."
|
||||||
gtk-update-icon-cache -q -f -t /usr/share/icons/hicolor || true
|
gtk-update-icon-cache -q -f -t /usr/share/icons/hicolor || true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ $1 == "config" ] && [ -x /usr/bin/update-desktop-database ]; then
|
if [ $1 == "configure" ] && [ -x /usr/bin/update-desktop-database ]; then
|
||||||
echo "updating desktop database..."
|
echo "configure desktop database..."
|
||||||
update-desktop-database -q /usr/share/applications || true
|
update-desktop-database -q /usr/share/applications || true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
@@ -6,4 +6,5 @@ Comment[zh_CN]=使用 Flutter 开发的 BiliBili 第三方客户端
|
|||||||
Exec=piliplus
|
Exec=piliplus
|
||||||
Icon=piliplus
|
Icon=piliplus
|
||||||
Terminal=false
|
Terminal=false
|
||||||
|
StartupWMClass=com.example.piliplus
|
||||||
Categories=Video;AudioVideo;Player;
|
Categories=Video;AudioVideo;Player;
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
## 1.0.0
|
|
||||||
|
|
||||||
### 初始版本
|
|
||||||
+ 直播、推荐、动态功能
|
|
||||||
+ 投稿、番剧播放功能
|
|
||||||
+ 播放器手势支持
|
|
||||||
+ 画质、音质、解码格式支持
|
|
||||||
+ 点赞、投币、收藏功能
|
|
||||||
+ 关注/取关、用户主页功能
|
|
||||||
+ 评论功能
|
|
||||||
+ 历史记录、稍后再看功能
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
## 1.0.1
|
|
||||||
|
|
||||||
### 修复
|
|
||||||
+ 升级播放器依赖
|
|
||||||
+ android平台 AV1格式视频支持
|
|
||||||
+ 视频全屏功能
|
|
||||||
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
## 1.0.10
|
|
||||||
|
|
||||||
### 修复
|
|
||||||
+ 长按倍速抬起后未恢复默认倍速
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
## 1.0.11
|
|
||||||
|
|
||||||
### 新功能
|
|
||||||
+ 适配了原生媒体通知栏 @Daydreamer-riri
|
|
||||||
+ 视频主题图标 @Daydreamer-riri
|
|
||||||
+ 关闭软件后自动画中画播放
|
|
||||||
+ UP主分组管理
|
|
||||||
+ md2样式底栏
|
|
||||||
+
|
|
||||||
|
|
||||||
|
|
||||||
### 修复
|
|
||||||
+ 历史记录记忆播放
|
|
||||||
+ 部分类型视频连播
|
|
||||||
+ 播放速度选择框不支持返回手势
|
|
||||||
+ 播放速度选择框不支持返回手势
|
|
||||||
+ 视频播放速度总是显示1.0X
|
|
||||||
+ 评论页面计数错误
|
|
||||||
+ 退出视频还有声音
|
|
||||||
|
|
||||||
|
|
||||||
### 优化
|
|
||||||
+ 视频加载速度
|
|
||||||
|
|
||||||
更多更新日志可在Github上查看
|
|
||||||
问题反馈、功能建议请查看「关于」页面。
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
## 1.0.12
|
|
||||||
|
|
||||||
|
|
||||||
### 修复
|
|
||||||
+ iOS端视频播放时没有声音
|
|
||||||
+ 超过6分钟弹幕不显示
|
|
||||||
+ 视频详情页网络异常
|
|
||||||
|
|
||||||
|
|
||||||
更多更新日志可在Github上查看
|
|
||||||
问题反馈、功能建议请查看「关于」页面。
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
## 1.0.13
|
|
||||||
|
|
||||||
|
|
||||||
### 新功能
|
|
||||||
+ 视频详情页稍后再看
|
|
||||||
+ 发送弹幕 感谢@orz12
|
|
||||||
+ 消息展示
|
|
||||||
+ up主页显示获赞数
|
|
||||||
+ up主页显示合集
|
|
||||||
+ 视频详情页「ai总结」增加开关
|
|
||||||
|
|
||||||
### 修复
|
|
||||||
+ 首页推荐问题(需要重新登录)
|
|
||||||
+ 长按倍速逻辑
|
|
||||||
+ 视频详情页网络异常
|
|
||||||
|
|
||||||
### 优化
|
|
||||||
+ 设置面板样式 感谢@GuMengYu @KoolShow
|
|
||||||
|
|
||||||
|
|
||||||
更多更新日志可在Github上查看
|
|
||||||
问题反馈、功能建议请查看「关于」页面。
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
## 1.0.14
|
|
||||||
|
|
||||||
圣诞节快乐~ 🎉
|
|
||||||
|
|
||||||
大部分内容由@orz12提供,感谢👏
|
|
||||||
|
|
||||||
### 修复
|
|
||||||
+ 全屏弹幕消失
|
|
||||||
+ iOS全屏/退出全屏视频暂停
|
|
||||||
+ 个人主页关注状态
|
|
||||||
+ 视频合集向下滑动UI问题
|
|
||||||
+ 媒体库滑动底栏不隐藏
|
|
||||||
+ 个人主页动态加载问题 * 2
|
|
||||||
+ 未登录状态访问个人主页异常
|
|
||||||
+ 视频搜索标题特殊字符转义
|
|
||||||
+ iOS闪退
|
|
||||||
+ 消息页面夜间模式异常
|
|
||||||
+ 消息页面含有撤回消息时异常
|
|
||||||
+ 弹幕速度
|
|
||||||
|
|
||||||
### 优化
|
|
||||||
+ 全屏播放方案优化
|
|
||||||
+ 弹幕加载逻辑优化
|
|
||||||
+ 点赞、投币逻辑优化
|
|
||||||
+ 进度条及播放时间渲染优化
|
|
||||||
|
|
||||||
更多更新日志可在Github上查看
|
|
||||||
问题反馈、功能建议请查看「关于」页面。
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
## 1.0.15
|
|
||||||
|
|
||||||
元旦快乐~ 🎉
|
|
||||||
|
|
||||||
### 功能
|
|
||||||
+ 转发动态评论展示
|
|
||||||
+ 推荐、最热、收藏视频增肌日期显示
|
|
||||||
|
|
||||||
### 修复
|
|
||||||
+ 全屏播放相关问题
|
|
||||||
+ 评论区@用户展示问题
|
|
||||||
+ 登录状态闪退问题
|
|
||||||
+ pip意外触发问题
|
|
||||||
+ 动态页tab切换样式问题
|
|
||||||
|
|
||||||
### 优化
|
|
||||||
+ 首页默认使用web端推荐
|
|
||||||
+ 取消iOS路由切换效果
|
|
||||||
+ 视频分享中添加Up主
|
|
||||||
|
|
||||||
更多更新日志可在Github上查看
|
|
||||||
问题反馈、功能建议请查看「关于」页面。
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
## 1.0.16
|
|
||||||
|
|
||||||
|
|
||||||
### 功能
|
|
||||||
+ toast 背景支持透明度调节
|
|
||||||
|
|
||||||
### 修复
|
|
||||||
+ web端推荐未展示【已关注】
|
|
||||||
+ up主动态页异常
|
|
||||||
+ 未打开自动播放时,视频详情页异常
|
|
||||||
+ 视频暂停状态取消自动ip
|
|
||||||
|
|
||||||
|
|
||||||
更多更新日志可在Github上查看
|
|
||||||
问题反馈、功能建议请查看「关于」页面。
|
|
||||||
@@ -1,39 +0,0 @@
|
|||||||
## 1.0.17
|
|
||||||
|
|
||||||
|
|
||||||
### 功能
|
|
||||||
+ 视频全屏时隐藏进度条
|
|
||||||
+ 动态内容增加投稿跳转
|
|
||||||
+ 未开启自动播放时点击封面播放
|
|
||||||
+ 弹幕发送标识
|
|
||||||
+ 定时关闭
|
|
||||||
+ 推荐视频卡片拉黑up功能
|
|
||||||
+ 首页tabbar编辑排序
|
|
||||||
|
|
||||||
### 修复
|
|
||||||
+ 连续跳转搜索页未刷新
|
|
||||||
+ 搜索结果为空时页面异常
|
|
||||||
+ 评论区链接解析
|
|
||||||
+ 视频全屏状态栏背景色
|
|
||||||
+ 私信对话气泡位置
|
|
||||||
+ 设置up关注分组样式
|
|
||||||
+ 每次推荐请求数据相同
|
|
||||||
+ iOS代理网络异常
|
|
||||||
+ 双击切换播放状态无声
|
|
||||||
+ 设置自定义倍速白屏
|
|
||||||
+ 免登录查看1080p
|
|
||||||
|
|
||||||
### 优化
|
|
||||||
+ 首页web端推荐观看数展示
|
|
||||||
+ 首页web端推荐接口更新
|
|
||||||
+ 首页样式
|
|
||||||
+ 搜索页跳转
|
|
||||||
+ 弹幕资源优化
|
|
||||||
+ 图片渲染占用内存优化(部分)
|
|
||||||
+ 两次返回退出应用
|
|
||||||
+ schame 补充
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
更多更新日志可在Github上查看
|
|
||||||
问题反馈、功能建议请查看「关于」页面。
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
## 1.0.18
|
|
||||||
|
|
||||||
|
|
||||||
### 功能
|
|
||||||
|
|
||||||
|
|
||||||
### 修复
|
|
||||||
|
|
||||||
|
|
||||||
### 优化
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
更多更新日志可在Github上查看
|
|
||||||
问题反馈、功能建议请查看「关于」页面。
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
## 1.0.19
|
|
||||||
|
|
||||||
|
|
||||||
### 修复
|
|
||||||
+ 视频404、评论加载错误
|
|
||||||
+ bvav转换
|
|
||||||
|
|
||||||
### 优化
|
|
||||||
+ 视频详情页内存占用
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
更多更新日志可在Github上查看
|
|
||||||
问题反馈、功能建议请查看「关于」页面。
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
## 1.0.2
|
|
||||||
|
|
||||||
### 新功能
|
|
||||||
+ 自动检查更新
|
|
||||||
+ 封面图片保存
|
|
||||||
+ 动态跳转番剧
|
|
||||||
+ 历史记录番剧记忆播放
|
|
||||||
+ 一键清空稍后再看
|
|
||||||
|
|
||||||
### 修复
|
|
||||||
+ 切换分P cid未切换
|
|
||||||
+ cookie存储问题
|
|
||||||
+ 登录/退出登录问题
|
|
||||||
|
|
||||||
### 优化
|
|
||||||
+ 页面空/异常状态样式
|
|
||||||
+ 退出登录提示
|
|
||||||
+ 请求节流
|
|
||||||
+ 全屏播放
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
## 1.0.3
|
|
||||||
|
|
||||||
建议卸载1.0.2版本,重新安装
|
|
||||||
### 新功能
|
|
||||||
+ 底部播放进度条设置
|
|
||||||
+ 复制图片链接
|
|
||||||
|
|
||||||
|
|
||||||
### 修复
|
|
||||||
+ 用户数据格式修改
|
|
||||||
+ video Fit
|
|
||||||
+ 没有audio 资源的视频异常
|
|
||||||
+ 评论区域图片无法点击
|
|
||||||
+ 视频进度条拖动问题
|
|
||||||
|
|
||||||
### 优化
|
|
||||||
+ 页面空/异常状态样式
|
|
||||||
+ 部分页面样式
|
|
||||||
+ 图片预览页面样式
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
## 1.0.4
|
|
||||||
|
|
||||||
### 新功能
|
|
||||||
+ 热搜刷新
|
|
||||||
+ 视频搜索排序、筛选
|
|
||||||
+ app字体大小自定义
|
|
||||||
+ app主题色自定义
|
|
||||||
+ 「课堂」类动态渲染
|
|
||||||
|
|
||||||
|
|
||||||
### 修复
|
|
||||||
+ 搜索词联想richText渲染异常
|
|
||||||
+ 部分动态点赞异常
|
|
||||||
+ 默认视频解码格式
|
|
||||||
+ 搜索页面返回搜索词未清空
|
|
||||||
+ 动态详情评论加载异常
|
|
||||||
+ 动态页面下拉刷新数据异常
|
|
||||||
|
|
||||||
### 优化
|
|
||||||
+ 一些样式修改
|
|
||||||
+ 取消热搜词缓存
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
## 1.0.5
|
|
||||||
|
|
||||||
主要是bug修复跟一部分小功能,弹幕功能需要下一版。
|
|
||||||
问题反馈请前往QQ频道或提交issues。
|
|
||||||
感谢🙏酷友「无力感*」「斤斤计较呀」「Pseudopamine」
|
|
||||||
|
|
||||||
### 新功能
|
|
||||||
+ 高帧率支持
|
|
||||||
+ 默认评论排序设置
|
|
||||||
+ 默认动态类别设置
|
|
||||||
+ 动态合集查看
|
|
||||||
+ 同时观看人数
|
|
||||||
+ iOS路由切换效果
|
|
||||||
|
|
||||||
|
|
||||||
### 修复
|
|
||||||
+ 收藏夹翻页
|
|
||||||
+ 首页搜索框频繁点击消失
|
|
||||||
+ 评论排序切换空白
|
|
||||||
+ 快速返回首页
|
|
||||||
+ 重复进入个人中心页面数据未刷新
|
|
||||||
+ 动态goods数据异常
|
|
||||||
+ 大会员切换番剧
|
|
||||||
+ 高画质codes匹配
|
|
||||||
|
|
||||||
|
|
||||||
### 优化
|
|
||||||
+ 倍速选择
|
|
||||||
+ 播放器亮度记忆
|
|
||||||
+ 下载对应版本apk
|
|
||||||
@@ -1,34 +0,0 @@
|
|||||||
## 1.0.6
|
|
||||||
|
|
||||||
问题反馈、功能建议请查看「关于」页面。
|
|
||||||
|
|
||||||
### 新功能
|
|
||||||
+ 首页单列布局
|
|
||||||
+ 首页推荐展示播放量、弹幕数
|
|
||||||
+ 简单弹幕功能实现(持续开发中...)
|
|
||||||
+ 评论区搜索关键词开关 issues#46
|
|
||||||
+ 热搜榜隐藏功能 issues#35
|
|
||||||
+ 自动全屏 issues#37
|
|
||||||
+ 快速收藏功能
|
|
||||||
+ 双击快进/快退开关
|
|
||||||
+ 评论链接跳转视频
|
|
||||||
+ 支持移除单个稍后再看
|
|
||||||
+ app scheme外链跳转
|
|
||||||
|
|
||||||
|
|
||||||
### 修复
|
|
||||||
+ 杜比、无损音频切换
|
|
||||||
+ 收藏夹展示 issues#42
|
|
||||||
+ 搜索建议次 issues#47
|
|
||||||
|
|
||||||
|
|
||||||
### 优化
|
|
||||||
+ 倍速选择优化
|
|
||||||
+ 导航条沉浸
|
|
||||||
+ 取消Hero动画
|
|
||||||
+ 视频锁定逻辑
|
|
||||||
+ 登录逻辑优化
|
|
||||||
+ 图片预览样式
|
|
||||||
+ +评论区用户点击范围
|
|
||||||
+ 关注、粉丝页面优化
|
|
||||||
+ 关闭自动播放时播放器初始化逻辑
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
## 1.0.7
|
|
||||||
|
|
||||||
默认倍速、直播弹幕、专栏等功能开发中
|
|
||||||
|
|
||||||
### 新功能
|
|
||||||
+ 弹幕设置、屏蔽功能
|
|
||||||
+ 不是很完美的后台播放功能
|
|
||||||
+ 不是很完美的画中画(pip)功能(Android端)
|
|
||||||
|
|
||||||
### 修复
|
|
||||||
+ 动态页面加载异常
|
|
||||||
+ 网络异常时页面空白
|
|
||||||
+ 竖屏全屏状态栏问题
|
|
||||||
+ iOS端代理请求异常
|
|
||||||
|
|
||||||
### 优化
|
|
||||||
+ 图片预览
|
|
||||||
+ 全屏播放时自动旋转
|
|
||||||
+ 转发内容增加视频标题
|
|
||||||
|
|
||||||
更多更新日志可在Github上查看
|
|
||||||
问题反馈、功能建议请查看「关于」页面。
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
## 1.0.8
|
|
||||||
|
|
||||||
直播弹幕、循环播放等功能开发中
|
|
||||||
|
|
||||||
### 新功能
|
|
||||||
+ 用户拉黑功能
|
|
||||||
+ gif图片保存
|
|
||||||
+ 删除已看历史记录
|
|
||||||
|
|
||||||
### 修复
|
|
||||||
+ 弹幕数量较少
|
|
||||||
+ 弹幕屏蔽设置自动记忆
|
|
||||||
+ 动态页面渲染
|
|
||||||
+ 用户主页数据错乱
|
|
||||||
+ 大家都在搜空白
|
|
||||||
+ 默认自动全屏,顶部操作栏丢失
|
|
||||||
|
|
||||||
|
|
||||||
### 优化
|
|
||||||
+ 全屏状态栏区域显示优化
|
|
||||||
+ 图片保存至PiliPala文件夹
|
|
||||||
|
|
||||||
更多更新日志可在Github上查看
|
|
||||||
问题反馈、功能建议请查看「关于」页面。
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
## 1.0.9
|
|
||||||
|
|
||||||
|
|
||||||
### 新功能
|
|
||||||
+ 自定义倍速、默认倍速
|
|
||||||
+ 历史记录搜索
|
|
||||||
+ 收藏夹搜索
|
|
||||||
+ 历史记录多选删除
|
|
||||||
+ 视频循环播放
|
|
||||||
+ 免登录看1080P
|
|
||||||
+ 评论区视频链接跳转
|
|
||||||
+ up主分组
|
|
||||||
+ up主投稿搜索
|
|
||||||
|
|
||||||
### 修复
|
|
||||||
+ 搜索视频标题乱码
|
|
||||||
+ 屏幕帧率
|
|
||||||
+ 动态页面渲染
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### 优化
|
|
||||||
+ 快进手势
|
|
||||||
+ 视频简介链接匹配
|
|
||||||
+ 视频全屏时安全区域
|
|
||||||
|
|
||||||
更多更新日志可在Github上查看
|
|
||||||
问题反馈、功能建议请查看「关于」页面。
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
PiliPlus is a third-party Bilibili client developed in Flutter,
|
|
||||||
fork from PiliPalaX (https://github.com/orz12/PiliPalaX).
|
|
||||||
|
|
||||||
Top Features:
|
|
||||||
|
|
||||||
* List of recommended videos
|
|
||||||
* List of hottest videos
|
|
||||||
* Popular live streams
|
|
||||||
* List of bangumis
|
|
||||||
* Block videos from blacklisted users
|
|
||||||
|
Before Width: | Height: | Size: 1.3 MiB |
|
Before Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 1.2 MiB |
|
Before Width: | Height: | Size: 526 KiB |
|
Before Width: | Height: | Size: 1.1 MiB |
@@ -1 +0,0 @@
|
|||||||
A third-party Bilibili client developed in Flutter
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
PiliPlus
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
PiliPlus 是使用 Flutter 开发的 BiliBili 第三方客户端,
|
|
||||||
是由PiliPalaX仓库fork并进行了差异化开发的版本
|
|
||||||
|
|
||||||
主要功能:
|
|
||||||
|
|
||||||
* 推荐视频列表
|
|
||||||
* 最热视频列表
|
|
||||||
* 热门直播
|
|
||||||
* 番剧列表
|
|
||||||
* 屏蔽黑名单内用户视频
|
|
||||||
|
Before Width: | Height: | Size: 1.3 MiB |
|
Before Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 1.2 MiB |
|
Before Width: | Height: | Size: 526 KiB |
|
Before Width: | Height: | Size: 1.1 MiB |
@@ -1 +0,0 @@
|
|||||||
使用 Flutter 开发的 BiliBili 第三方客户端
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
PiliPlus
|
|
||||||
@@ -20,7 +20,5 @@
|
|||||||
<string>????</string>
|
<string>????</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>1.0</string>
|
<string>1.0</string>
|
||||||
<key>MinimumOSVersion</key>
|
|
||||||
<string>11.0</string>
|
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# Uncomment this line to define a global platform for your project
|
# Uncomment this line to define a global platform for your project
|
||||||
platform :ios, '13.0'
|
platform :ios, '14.0'
|
||||||
|
|
||||||
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
|
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
|
||||||
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
|
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
|
||||||
|
|||||||
203
ios/Podfile.lock
@@ -1,141 +1,166 @@
|
|||||||
PODS:
|
PODS:
|
||||||
- appscheme (1.0.4):
|
- app_links (7.0.0):
|
||||||
- Flutter
|
- Flutter
|
||||||
- audio_service (0.0.1):
|
- audio_service (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
|
- FlutterMacOS
|
||||||
- audio_session (0.0.1):
|
- audio_session (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- auto_orientation (0.0.1):
|
- battery_plus (1.0.0):
|
||||||
|
- Flutter
|
||||||
|
- chat_bottom_container (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- connectivity_plus (0.0.1):
|
- connectivity_plus (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- ReachabilitySwift
|
|
||||||
- device_info_plus (0.0.1):
|
- device_info_plus (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
|
- file_picker (0.0.1):
|
||||||
|
- Flutter
|
||||||
|
- FlutterMacOS
|
||||||
- Flutter (1.0.0)
|
- Flutter (1.0.0)
|
||||||
|
- flutter_inappwebview_ios (0.0.1):
|
||||||
|
- Flutter
|
||||||
|
- flutter_inappwebview_ios/Core (= 0.0.1)
|
||||||
|
- OrderedSet (~> 6.0.3)
|
||||||
|
- flutter_inappwebview_ios/Core (0.0.1):
|
||||||
|
- Flutter
|
||||||
|
- OrderedSet (~> 6.0.3)
|
||||||
- flutter_mailer (0.0.1):
|
- flutter_mailer (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
|
- flutter_native_splash (2.4.3):
|
||||||
|
- Flutter
|
||||||
- flutter_volume_controller (0.0.1):
|
- flutter_volume_controller (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- fluttertoast (0.0.2):
|
- fluttertoast (0.0.2):
|
||||||
- Flutter
|
- Flutter
|
||||||
- Toast
|
- gt3_flutter_plugin (0.0.9):
|
||||||
- FMDB (2.7.5):
|
|
||||||
- FMDB/standard (= 2.7.5)
|
|
||||||
- FMDB/standard (2.7.5)
|
|
||||||
- gt3_flutter_plugin (0.0.8):
|
|
||||||
- Flutter
|
- Flutter
|
||||||
- GT3Captcha-iOS
|
- GT3Captcha-iOS
|
||||||
- GT3Captcha-iOS (0.15.8.3)
|
- GT3Captcha-iOS (0.15.9)
|
||||||
|
- image_cropper (0.0.5):
|
||||||
|
- Flutter
|
||||||
|
- TOCropViewController (~> 3.1.2)
|
||||||
|
- image_picker_ios (0.0.1):
|
||||||
|
- Flutter
|
||||||
|
- live_photo_maker (0.0.3):
|
||||||
|
- Flutter
|
||||||
- media_kit_libs_ios_video (1.0.4):
|
- media_kit_libs_ios_video (1.0.4):
|
||||||
- Flutter
|
- Flutter
|
||||||
- media_kit_native_event_loop (1.0.0):
|
- media_kit_native_event_loop (1.0.0):
|
||||||
- Flutter
|
- Flutter
|
||||||
- media_kit_video (0.0.1):
|
- media_kit_video (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
|
- native_device_orientation (0.0.1):
|
||||||
|
- Flutter
|
||||||
|
- OrderedSet (6.0.3)
|
||||||
- package_info_plus (0.4.5):
|
- package_info_plus (0.4.5):
|
||||||
- Flutter
|
- Flutter
|
||||||
- path_provider_foundation (0.0.1):
|
- permission_handler_apple (9.3.0):
|
||||||
- Flutter
|
- Flutter
|
||||||
- FlutterMacOS
|
|
||||||
- permission_handler_apple (9.1.1):
|
|
||||||
- Flutter
|
|
||||||
- ReachabilitySwift (5.0.0)
|
|
||||||
- saver_gallery (0.0.1):
|
- saver_gallery (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- screen_brightness_ios (0.1.0):
|
- screen_brightness_ios (0.1.0):
|
||||||
- Flutter
|
- Flutter
|
||||||
- share_plus (0.0.1):
|
- share_plus (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- sqflite (0.0.3):
|
- shared_preferences_foundation (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- FMDB (>= 2.7.5)
|
- FlutterMacOS
|
||||||
- status_bar_control (3.2.1):
|
- sqflite_darwin (0.0.4):
|
||||||
- Flutter
|
- Flutter
|
||||||
- system_proxy (0.0.1):
|
- FlutterMacOS
|
||||||
- Flutter
|
- TOCropViewController (3.1.2)
|
||||||
- Toast (4.1.0)
|
|
||||||
- url_launcher_ios (0.0.1):
|
- url_launcher_ios (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- volume_controller (0.0.1):
|
|
||||||
- Flutter
|
|
||||||
- wakelock_plus (0.0.1):
|
- wakelock_plus (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- webview_cookie_manager (0.0.1):
|
|
||||||
- Flutter
|
|
||||||
- webview_flutter_wkwebview (0.0.1):
|
|
||||||
- Flutter
|
|
||||||
|
|
||||||
DEPENDENCIES:
|
DEPENDENCIES:
|
||||||
- appscheme (from `.symlinks/plugins/appscheme/ios`)
|
- app_links (from `.symlinks/plugins/app_links/ios`)
|
||||||
- audio_service (from `.symlinks/plugins/audio_service/ios`)
|
- audio_service (from `.symlinks/plugins/audio_service/darwin`)
|
||||||
- audio_session (from `.symlinks/plugins/audio_session/ios`)
|
- audio_session (from `.symlinks/plugins/audio_session/ios`)
|
||||||
- auto_orientation (from `.symlinks/plugins/auto_orientation/ios`)
|
- battery_plus (from `.symlinks/plugins/battery_plus/ios`)
|
||||||
|
- chat_bottom_container (from `.symlinks/plugins/chat_bottom_container/ios`)
|
||||||
- connectivity_plus (from `.symlinks/plugins/connectivity_plus/ios`)
|
- connectivity_plus (from `.symlinks/plugins/connectivity_plus/ios`)
|
||||||
- device_info_plus (from `.symlinks/plugins/device_info_plus/ios`)
|
- device_info_plus (from `.symlinks/plugins/device_info_plus/ios`)
|
||||||
|
- file_picker (from `.symlinks/plugins/file_picker/darwin`)
|
||||||
- Flutter (from `Flutter`)
|
- Flutter (from `Flutter`)
|
||||||
|
- flutter_inappwebview_ios (from `.symlinks/plugins/flutter_inappwebview_ios/ios`)
|
||||||
- flutter_mailer (from `.symlinks/plugins/flutter_mailer/ios`)
|
- flutter_mailer (from `.symlinks/plugins/flutter_mailer/ios`)
|
||||||
|
- flutter_native_splash (from `.symlinks/plugins/flutter_native_splash/ios`)
|
||||||
- flutter_volume_controller (from `.symlinks/plugins/flutter_volume_controller/ios`)
|
- flutter_volume_controller (from `.symlinks/plugins/flutter_volume_controller/ios`)
|
||||||
- fluttertoast (from `.symlinks/plugins/fluttertoast/ios`)
|
- fluttertoast (from `.symlinks/plugins/fluttertoast/ios`)
|
||||||
- gt3_flutter_plugin (from `.symlinks/plugins/gt3_flutter_plugin/ios`)
|
- gt3_flutter_plugin (from `.symlinks/plugins/gt3_flutter_plugin/ios`)
|
||||||
|
- image_cropper (from `.symlinks/plugins/image_cropper/ios`)
|
||||||
|
- image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`)
|
||||||
|
- live_photo_maker (from `.symlinks/plugins/live_photo_maker/ios`)
|
||||||
- media_kit_libs_ios_video (from `.symlinks/plugins/media_kit_libs_ios_video/ios`)
|
- media_kit_libs_ios_video (from `.symlinks/plugins/media_kit_libs_ios_video/ios`)
|
||||||
- media_kit_native_event_loop (from `.symlinks/plugins/media_kit_native_event_loop/ios`)
|
- media_kit_native_event_loop (from `.symlinks/plugins/media_kit_native_event_loop/ios`)
|
||||||
- media_kit_video (from `.symlinks/plugins/media_kit_video/ios`)
|
- media_kit_video (from `.symlinks/plugins/media_kit_video/ios`)
|
||||||
|
- native_device_orientation (from `.symlinks/plugins/native_device_orientation/ios`)
|
||||||
- package_info_plus (from `.symlinks/plugins/package_info_plus/ios`)
|
- package_info_plus (from `.symlinks/plugins/package_info_plus/ios`)
|
||||||
- path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`)
|
|
||||||
- permission_handler_apple (from `.symlinks/plugins/permission_handler_apple/ios`)
|
- permission_handler_apple (from `.symlinks/plugins/permission_handler_apple/ios`)
|
||||||
- saver_gallery (from `.symlinks/plugins/saver_gallery/ios`)
|
- saver_gallery (from `.symlinks/plugins/saver_gallery/ios`)
|
||||||
- screen_brightness_ios (from `.symlinks/plugins/screen_brightness_ios/ios`)
|
- screen_brightness_ios (from `.symlinks/plugins/screen_brightness_ios/ios`)
|
||||||
- share_plus (from `.symlinks/plugins/share_plus/ios`)
|
- share_plus (from `.symlinks/plugins/share_plus/ios`)
|
||||||
- sqflite (from `.symlinks/plugins/sqflite/ios`)
|
- shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`)
|
||||||
- status_bar_control (from `.symlinks/plugins/status_bar_control/ios`)
|
- sqflite_darwin (from `.symlinks/plugins/sqflite_darwin/darwin`)
|
||||||
- system_proxy (from `.symlinks/plugins/system_proxy/ios`)
|
|
||||||
- url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
|
- url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
|
||||||
- volume_controller (from `.symlinks/plugins/volume_controller/ios`)
|
|
||||||
- wakelock_plus (from `.symlinks/plugins/wakelock_plus/ios`)
|
- wakelock_plus (from `.symlinks/plugins/wakelock_plus/ios`)
|
||||||
- webview_cookie_manager (from `.symlinks/plugins/webview_cookie_manager/ios`)
|
|
||||||
- webview_flutter_wkwebview (from `.symlinks/plugins/webview_flutter_wkwebview/ios`)
|
|
||||||
|
|
||||||
SPEC REPOS:
|
SPEC REPOS:
|
||||||
trunk:
|
trunk:
|
||||||
- FMDB
|
|
||||||
- GT3Captcha-iOS
|
- GT3Captcha-iOS
|
||||||
- ReachabilitySwift
|
- OrderedSet
|
||||||
- Toast
|
- TOCropViewController
|
||||||
|
|
||||||
EXTERNAL SOURCES:
|
EXTERNAL SOURCES:
|
||||||
appscheme:
|
app_links:
|
||||||
:path: ".symlinks/plugins/appscheme/ios"
|
:path: ".symlinks/plugins/app_links/ios"
|
||||||
audio_service:
|
audio_service:
|
||||||
:path: ".symlinks/plugins/audio_service/ios"
|
:path: ".symlinks/plugins/audio_service/darwin"
|
||||||
audio_session:
|
audio_session:
|
||||||
:path: ".symlinks/plugins/audio_session/ios"
|
:path: ".symlinks/plugins/audio_session/ios"
|
||||||
auto_orientation:
|
battery_plus:
|
||||||
:path: ".symlinks/plugins/auto_orientation/ios"
|
:path: ".symlinks/plugins/battery_plus/ios"
|
||||||
|
chat_bottom_container:
|
||||||
|
:path: ".symlinks/plugins/chat_bottom_container/ios"
|
||||||
connectivity_plus:
|
connectivity_plus:
|
||||||
:path: ".symlinks/plugins/connectivity_plus/ios"
|
:path: ".symlinks/plugins/connectivity_plus/ios"
|
||||||
device_info_plus:
|
device_info_plus:
|
||||||
:path: ".symlinks/plugins/device_info_plus/ios"
|
:path: ".symlinks/plugins/device_info_plus/ios"
|
||||||
|
file_picker:
|
||||||
|
:path: ".symlinks/plugins/file_picker/darwin"
|
||||||
Flutter:
|
Flutter:
|
||||||
:path: Flutter
|
:path: Flutter
|
||||||
|
flutter_inappwebview_ios:
|
||||||
|
:path: ".symlinks/plugins/flutter_inappwebview_ios/ios"
|
||||||
flutter_mailer:
|
flutter_mailer:
|
||||||
:path: ".symlinks/plugins/flutter_mailer/ios"
|
:path: ".symlinks/plugins/flutter_mailer/ios"
|
||||||
|
flutter_native_splash:
|
||||||
|
:path: ".symlinks/plugins/flutter_native_splash/ios"
|
||||||
flutter_volume_controller:
|
flutter_volume_controller:
|
||||||
:path: ".symlinks/plugins/flutter_volume_controller/ios"
|
:path: ".symlinks/plugins/flutter_volume_controller/ios"
|
||||||
fluttertoast:
|
fluttertoast:
|
||||||
:path: ".symlinks/plugins/fluttertoast/ios"
|
:path: ".symlinks/plugins/fluttertoast/ios"
|
||||||
gt3_flutter_plugin:
|
gt3_flutter_plugin:
|
||||||
:path: ".symlinks/plugins/gt3_flutter_plugin/ios"
|
:path: ".symlinks/plugins/gt3_flutter_plugin/ios"
|
||||||
|
image_cropper:
|
||||||
|
:path: ".symlinks/plugins/image_cropper/ios"
|
||||||
|
image_picker_ios:
|
||||||
|
:path: ".symlinks/plugins/image_picker_ios/ios"
|
||||||
|
live_photo_maker:
|
||||||
|
:path: ".symlinks/plugins/live_photo_maker/ios"
|
||||||
media_kit_libs_ios_video:
|
media_kit_libs_ios_video:
|
||||||
:path: ".symlinks/plugins/media_kit_libs_ios_video/ios"
|
:path: ".symlinks/plugins/media_kit_libs_ios_video/ios"
|
||||||
media_kit_native_event_loop:
|
media_kit_native_event_loop:
|
||||||
:path: ".symlinks/plugins/media_kit_native_event_loop/ios"
|
:path: ".symlinks/plugins/media_kit_native_event_loop/ios"
|
||||||
media_kit_video:
|
media_kit_video:
|
||||||
:path: ".symlinks/plugins/media_kit_video/ios"
|
:path: ".symlinks/plugins/media_kit_video/ios"
|
||||||
|
native_device_orientation:
|
||||||
|
:path: ".symlinks/plugins/native_device_orientation/ios"
|
||||||
package_info_plus:
|
package_info_plus:
|
||||||
:path: ".symlinks/plugins/package_info_plus/ios"
|
:path: ".symlinks/plugins/package_info_plus/ios"
|
||||||
path_provider_foundation:
|
|
||||||
:path: ".symlinks/plugins/path_provider_foundation/darwin"
|
|
||||||
permission_handler_apple:
|
permission_handler_apple:
|
||||||
:path: ".symlinks/plugins/permission_handler_apple/ios"
|
:path: ".symlinks/plugins/permission_handler_apple/ios"
|
||||||
saver_gallery:
|
saver_gallery:
|
||||||
@@ -144,57 +169,51 @@ EXTERNAL SOURCES:
|
|||||||
:path: ".symlinks/plugins/screen_brightness_ios/ios"
|
:path: ".symlinks/plugins/screen_brightness_ios/ios"
|
||||||
share_plus:
|
share_plus:
|
||||||
:path: ".symlinks/plugins/share_plus/ios"
|
:path: ".symlinks/plugins/share_plus/ios"
|
||||||
sqflite:
|
shared_preferences_foundation:
|
||||||
:path: ".symlinks/plugins/sqflite/ios"
|
:path: ".symlinks/plugins/shared_preferences_foundation/darwin"
|
||||||
status_bar_control:
|
sqflite_darwin:
|
||||||
:path: ".symlinks/plugins/status_bar_control/ios"
|
:path: ".symlinks/plugins/sqflite_darwin/darwin"
|
||||||
system_proxy:
|
|
||||||
:path: ".symlinks/plugins/system_proxy/ios"
|
|
||||||
url_launcher_ios:
|
url_launcher_ios:
|
||||||
:path: ".symlinks/plugins/url_launcher_ios/ios"
|
:path: ".symlinks/plugins/url_launcher_ios/ios"
|
||||||
volume_controller:
|
|
||||||
:path: ".symlinks/plugins/volume_controller/ios"
|
|
||||||
wakelock_plus:
|
wakelock_plus:
|
||||||
:path: ".symlinks/plugins/wakelock_plus/ios"
|
:path: ".symlinks/plugins/wakelock_plus/ios"
|
||||||
webview_cookie_manager:
|
|
||||||
:path: ".symlinks/plugins/webview_cookie_manager/ios"
|
|
||||||
webview_flutter_wkwebview:
|
|
||||||
:path: ".symlinks/plugins/webview_flutter_wkwebview/ios"
|
|
||||||
|
|
||||||
SPEC CHECKSUMS:
|
SPEC CHECKSUMS:
|
||||||
appscheme: b1c3f8862331cb20430cf9e0e4af85dbc1572ad8
|
app_links: a754cbec3c255bd4bbb4d236ecc06f28cd9a7ce8
|
||||||
audio_service: f509d65da41b9521a61f1c404dd58651f265a567
|
audio_service: aa99a6ba2ae7565996015322b0bb024e1d25c6fd
|
||||||
audio_session: 4f3e461722055d21515cf3261b64c973c062f345
|
audio_session: 9bb7f6c970f21241b19f5a3658097ae459681ba0
|
||||||
auto_orientation: 102ed811a5938d52c86520ddd7ecd3a126b5d39d
|
battery_plus: b42253f6d2dde71712f8c36fef456d99121c5977
|
||||||
connectivity_plus: 07c49e96d7fc92bc9920617b83238c4d178b446a
|
chat_bottom_container: f1eb8323db77a87db50f361142c679f11e892d1b
|
||||||
device_info_plus: c6fb39579d0f423935b0c9ce7ee2f44b71b9fce6
|
connectivity_plus: cb623214f4e1f6ef8fe7403d580fdad517d2f7dd
|
||||||
Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854
|
device_info_plus: 21fcca2080fbcd348be798aa36c3e5ed849eefbe
|
||||||
flutter_mailer: 2ef5a67087bc8c6c4cefd04a178bf1ae2c94cd83
|
file_picker: 70164d9778c42c47218d6cd79ce435de0856b11a
|
||||||
flutter_volume_controller: e4d5832f08008180f76e30faf671ffd5a425e529
|
Flutter: cabc95a1d2626b1b06e7179b784ebcf0c0cde467
|
||||||
fluttertoast: 31b00dabfa7fb7bacd9e7dbee580d7a2ff4bf265
|
flutter_inappwebview_ios: b89ba3482b96fb25e00c967aae065701b66e9b99
|
||||||
FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
|
flutter_mailer: 3a8cd4f36c960fb04528d5471097270c19fec1c4
|
||||||
gt3_flutter_plugin: bfa1f26e9a09dc00401514be5ed437f964cabf23
|
flutter_native_splash: c32d145d68aeda5502d5f543ee38c192065986cf
|
||||||
GT3Captcha-iOS: 5e3b1077834d8a9d6f4d64a447a30af3e14affe6
|
flutter_volume_controller: c2be490cb0487e8b88d0d9fc2b7e1c139a4ebccb
|
||||||
media_kit_libs_ios_video: a5fe24bc7875ccd6378a0978c13185e1344651c1
|
fluttertoast: 2c67e14dce98bbdb200df9e1acf610d7a6264ea1
|
||||||
media_kit_native_event_loop: e6b2ab20cf0746eb1c33be961fcf79667304fa2a
|
gt3_flutter_plugin: 37090e5fa66ff2a52939eb9d208fc36fa49d36e5
|
||||||
media_kit_video: 5da63f157170e5bf303bf85453b7ef6971218a2e
|
GT3Captcha-iOS: aeb6fed2e8594099821430a89208679e5a55b740
|
||||||
package_info_plus: 115f4ad11e0698c8c1c5d8a689390df880f47e85
|
image_cropper: fca51f94982730acae168c4b5d691e0f11aeb259
|
||||||
path_provider_foundation: 29f094ae23ebbca9d3d0cec13889cd9060c0e943
|
image_picker_ios: e0ece4aa2a75771a7de3fa735d26d90817041326
|
||||||
permission_handler_apple: e76247795d700c14ea09e3a2d8855d41ee80a2e6
|
live_photo_maker: 29280ca88323bd5a33aafd00d98624d5cf522176
|
||||||
ReachabilitySwift: 985039c6f7b23a1da463388634119492ff86c825
|
media_kit_libs_ios_video: 5a18affdb97d1f5d466dc79988b13eff6c5e2854
|
||||||
saver_gallery: 2b4e584106fde2407ab51560f3851564963e6b78
|
media_kit_native_event_loop: 5fba1a849a6c87a34985f1e178a0de5bd444a0cf
|
||||||
screen_brightness_ios: 715ca807df953bf676d339f11464e438143ee625
|
media_kit_video: 1746e198cb697d1ffb734b1d05ec429d1fcd1474
|
||||||
share_plus: c3fef564749587fc939ef86ffb283ceac0baf9f5
|
native_device_orientation: e3580675687d5034770da198f6839ebf2122ef94
|
||||||
sqflite: 31f7eba61e3074736dff8807a9b41581e4f7f15a
|
OrderedSet: e539b66b644ff081c73a262d24ad552a69be3a94
|
||||||
status_bar_control: 7c84146799e6a076315cc1550f78ef53aae3e446
|
package_info_plus: af8e2ca6888548050f16fa2f1938db7b5a5df499
|
||||||
system_proxy: bec1a5c5af67dd3e3ebf43979400a8756c04cc44
|
permission_handler_apple: 4ed2196e43d0651e8ff7ca3483a069d469701f2d
|
||||||
Toast: ec33c32b8688982cecc6348adeae667c1b9938da
|
saver_gallery: af2d0c762dafda254e0ad025ef0dabd6506cd490
|
||||||
url_launcher_ios: bf5ce03e0e2088bad9cc378ea97fa0ed5b49673b
|
screen_brightness_ios: 9953fd7da5bd480f1a93990daeec2eb42d4f3b52
|
||||||
volume_controller: 531ddf792994285c9b17f9d8a7e4dcdd29b3eae9
|
share_plus: 50da8cb520a8f0f65671c6c6a99b3617ed10a58a
|
||||||
wakelock_plus: 8b09852c8876491e4b6d179e17dfe2a0b5f60d47
|
shared_preferences_foundation: 7036424c3d8ec98dfe75ff1667cb0cd531ec82bb
|
||||||
webview_cookie_manager: eaf920722b493bd0f7611b5484771ca53fed03f7
|
sqflite_darwin: 20b2a3a3b70e43edae938624ce550a3cbf66a3d0
|
||||||
webview_flutter_wkwebview: 2e2d318f21a5e036e2c3f26171342e95908bd60a
|
TOCropViewController: a916930c465b5d9445a74d95e0c0da931771b4df
|
||||||
|
url_launcher_ios: 7a95fa5b60cc718a708b8f2966718e93db0cef1b
|
||||||
|
wakelock_plus: e29112ab3ef0b318e58cfa5c32326458be66b556
|
||||||
|
|
||||||
PODFILE CHECKSUM: 637cd290bed23275b5f5ffcc7eb1e73d0a5fb2be
|
PODFILE CHECKSUM: 5e755568c318fde60f7b59d132a4ba634d53bf27
|
||||||
|
|
||||||
COCOAPODS: 1.14.3
|
COCOAPODS: 1.16.2
|
||||||
|
|||||||
@@ -156,7 +156,7 @@
|
|||||||
97C146E61CF9000F007C117D /* Project object */ = {
|
97C146E61CF9000F007C117D /* Project object */ = {
|
||||||
isa = PBXProject;
|
isa = PBXProject;
|
||||||
attributes = {
|
attributes = {
|
||||||
LastUpgradeCheck = 1430;
|
LastUpgradeCheck = 1510;
|
||||||
ORGANIZATIONNAME = "";
|
ORGANIZATIONNAME = "";
|
||||||
TargetAttributes = {
|
TargetAttributes = {
|
||||||
97C146ED1CF9000F007C117D = {
|
97C146ED1CF9000F007C117D = {
|
||||||
@@ -360,7 +360,7 @@
|
|||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
|
||||||
MTL_ENABLE_DEBUG_INFO = NO;
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
SUPPORTED_PLATFORMS = iphoneos;
|
SUPPORTED_PLATFORMS = iphoneos;
|
||||||
@@ -438,7 +438,7 @@
|
|||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
|
||||||
MTL_ENABLE_DEBUG_INFO = YES;
|
MTL_ENABLE_DEBUG_INFO = YES;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
@@ -487,7 +487,7 @@
|
|||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
|
||||||
MTL_ENABLE_DEBUG_INFO = NO;
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
SUPPORTED_PLATFORMS = iphoneos;
|
SUPPORTED_PLATFORMS = iphoneos;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<Scheme
|
<Scheme
|
||||||
LastUpgradeVersion = "1430"
|
LastUpgradeVersion = "1510"
|
||||||
version = "1.3">
|
version = "1.3">
|
||||||
<BuildAction
|
<BuildAction
|
||||||
parallelizeBuildables = "YES"
|
parallelizeBuildables = "YES"
|
||||||
@@ -48,6 +48,7 @@
|
|||||||
ignoresPersistentStateOnLaunch = "NO"
|
ignoresPersistentStateOnLaunch = "NO"
|
||||||
debugDocumentVersioning = "YES"
|
debugDocumentVersioning = "YES"
|
||||||
debugServiceExtension = "internal"
|
debugServiceExtension = "internal"
|
||||||
|
enableGPUValidationMode = "1"
|
||||||
allowLocationSimulation = "YES">
|
allowLocationSimulation = "YES">
|
||||||
<BuildableProductRunnable
|
<BuildableProductRunnable
|
||||||
runnableDebuggingMode = "0">
|
runnableDebuggingMode = "0">
|
||||||
|
|||||||
@@ -1,14 +1,17 @@
|
|||||||
import UIKit
|
|
||||||
import Flutter
|
import Flutter
|
||||||
|
import UIKit
|
||||||
|
|
||||||
@main
|
@main
|
||||||
@objc class AppDelegate: FlutterAppDelegate {
|
@objc class AppDelegate: FlutterAppDelegate, FlutterImplicitEngineDelegate {
|
||||||
override func application(
|
override func application(
|
||||||
_ application: UIApplication,
|
_ application: UIApplication,
|
||||||
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
|
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
|
||||||
) -> Bool {
|
) -> Bool {
|
||||||
GeneratedPluginRegistrant.register(with: self)
|
|
||||||
application.applicationSupportsShakeToEdit = false // Disable shake to undo
|
application.applicationSupportsShakeToEdit = false // Disable shake to undo
|
||||||
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
|
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func didInitializeImplicitFlutterEngine(_ engineBridge: FlutterImplicitEngineBridge) {
|
||||||
|
GeneratedPluginRegistrant.register(with: engineBridge.pluginRegistry)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,27 @@
|
|||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
<plist version="1.0">
|
<plist version="1.0">
|
||||||
<dict>
|
<dict>
|
||||||
|
<key>UIApplicationSceneManifest</key>
|
||||||
|
<dict>
|
||||||
|
<key>UIApplicationSupportsMultipleScenes</key>
|
||||||
|
<false/>
|
||||||
|
<key>UISceneConfigurations</key>
|
||||||
|
<dict>
|
||||||
|
<key>UIWindowSceneSessionRoleApplication</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>UISceneClassName</key>
|
||||||
|
<string>UIWindowScene</string>
|
||||||
|
<key>UISceneDelegateClassName</key>
|
||||||
|
<string>FlutterSceneDelegate</string>
|
||||||
|
<key>UISceneConfigurationName</key>
|
||||||
|
<string>flutter</string>
|
||||||
|
<key>UISceneStoryboardFile</key>
|
||||||
|
<string>Main</string>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
<key>FlutterDeepLinkingEnabled</key>
|
<key>FlutterDeepLinkingEnabled</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>CFBundleDevelopmentRegion</key>
|
<key>CFBundleDevelopmentRegion</key>
|
||||||
@@ -110,5 +131,13 @@
|
|||||||
</array>
|
</array>
|
||||||
<key>UIStatusBarHidden</key>
|
<key>UIStatusBarHidden</key>
|
||||||
<false/>
|
<false/>
|
||||||
|
<key>NSLocalNetworkUsageDescription</key>
|
||||||
|
<string>需要访问本地网络以发现和连接 DLNA 投屏设备</string>
|
||||||
|
<key>NSBonjourServices</key>
|
||||||
|
<array>
|
||||||
|
<string>_ssdp._udp</string>
|
||||||
|
<string>_upnp._tcp</string>
|
||||||
|
<string>_http._tcp</string>
|
||||||
|
</array>
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
class BuildConfig {
|
abstract final class BuildConfig {
|
||||||
static const int versionCode = int.fromEnvironment(
|
static const int versionCode = int.fromEnvironment(
|
||||||
'pili.code',
|
'pili.code',
|
||||||
defaultValue: 1,
|
defaultValue: 1,
|
||||||
|
|||||||
57
lib/common/assets.dart
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
abstract final class Assets {
|
||||||
|
static const digitalNum = 'digital_id_num';
|
||||||
|
|
||||||
|
static const logo = 'assets/images/logo/logo.png';
|
||||||
|
static const logo2 = 'assets/images/logo/logo_2.png';
|
||||||
|
static const logoIco = 'assets/images/logo/ico/app_icon.ico';
|
||||||
|
static const logoLarge = 'assets/images/logo/desktop/logo_large.png';
|
||||||
|
|
||||||
|
static const vipIcon = 'assets/images/big-vip.png';
|
||||||
|
static const avatarPlaceHolder = 'assets/images/noface.jpeg';
|
||||||
|
static const loading = 'assets/images/loading.png';
|
||||||
|
static const buffering = 'assets/images/loading.webp';
|
||||||
|
static const play = 'assets/images/play.png';
|
||||||
|
static const topicHeader = 'assets/images/topic-header-bg.png';
|
||||||
|
static const trendingBanner = 'assets/images/trending_banner.png';
|
||||||
|
static const ai = 'assets/images/ai.png';
|
||||||
|
static const error = 'assets/images/error.svg';
|
||||||
|
|
||||||
|
static const livingChart = 'assets/images/live.gif';
|
||||||
|
static const livingStatic = 'assets/images/live.png';
|
||||||
|
static const livingRect = 'assets/images/live/live.gif';
|
||||||
|
static const livingBackground = 'assets/images/live/default_bg.webp';
|
||||||
|
|
||||||
|
static const thunder1 = 'assets/images/paycoins/ic_thunder_1.png';
|
||||||
|
static const thunder2 = 'assets/images/paycoins/ic_thunder_2.png';
|
||||||
|
static const thunder3 = 'assets/images/paycoins/ic_thunder_3.png';
|
||||||
|
static const notEnough = 'assets/images/paycoins/ic_22_not_enough_pay.png';
|
||||||
|
static const mario = 'assets/images/paycoins/ic_22_mario.png';
|
||||||
|
static const gunSister = 'assets/images/paycoins/ic_22_gun_sister.png';
|
||||||
|
static const payBox = 'assets/images/paycoins/ic_pay_coins_box.png';
|
||||||
|
static const coinsOne = 'assets/images/paycoins/ic_coins_one.png';
|
||||||
|
static const coinsTwo = 'assets/images/paycoins/ic_coins_two.png';
|
||||||
|
static const left = 'assets/images/paycoins/ic_left.png';
|
||||||
|
static const leftDisable = 'assets/images/paycoins/ic_left_disable.png';
|
||||||
|
static const right = 'assets/images/paycoins/ic_right.png';
|
||||||
|
static const rightDisable = 'assets/images/paycoins/ic_right_disable.png';
|
||||||
|
static const panelClose = 'assets/images/paycoins/ic_panel_close.png';
|
||||||
|
|
||||||
|
static const List<String> mpvAnime4KShaders = [
|
||||||
|
'Anime4K_Clamp_Highlights.glsl',
|
||||||
|
'Anime4K_Restore_CNN_VL.glsl',
|
||||||
|
'Anime4K_Upscale_CNN_x2_VL.glsl',
|
||||||
|
'Anime4K_AutoDownscalePre_x2.glsl',
|
||||||
|
'Anime4K_AutoDownscalePre_x4.glsl',
|
||||||
|
'Anime4K_Upscale_CNN_x2_M.glsl',
|
||||||
|
];
|
||||||
|
|
||||||
|
static const mpvAnime4KShadersLite = [
|
||||||
|
'Anime4K_Clamp_Highlights.glsl',
|
||||||
|
'Anime4K_Restore_CNN_M.glsl',
|
||||||
|
'Anime4K_Restore_CNN_S.glsl',
|
||||||
|
'Anime4K_Upscale_CNN_x2_M.glsl',
|
||||||
|
'Anime4K_AutoDownscalePre_x2.glsl',
|
||||||
|
'Anime4K_AutoDownscalePre_x4.glsl',
|
||||||
|
'Anime4K_Upscale_CNN_x2_S.glsl',
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -1,18 +1,4 @@
|
|||||||
import 'package:PiliPlus/http/constants.dart';
|
abstract final class Constants {
|
||||||
import 'package:flutter/material.dart';
|
|
||||||
|
|
||||||
class StyleString {
|
|
||||||
static const double cardSpace = 8;
|
|
||||||
static const double safeSpace = 12;
|
|
||||||
static const BorderRadius mdRadius = BorderRadius.all(imgRadius);
|
|
||||||
static const Radius imgRadius = Radius.circular(10);
|
|
||||||
static const double aspectRatio = 16 / 10;
|
|
||||||
static const bottomSheetRadius = BorderRadius.vertical(
|
|
||||||
top: Radius.circular(18),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
class Constants {
|
|
||||||
static const appName = 'PiliPlus';
|
static const appName = 'PiliPlus';
|
||||||
static const sourceCodeUrl = 'https://github.com/bggRGjQaUbCoE/PiliPlus';
|
static const sourceCodeUrl = 'https://github.com/bggRGjQaUbCoE/PiliPlus';
|
||||||
|
|
||||||
@@ -21,9 +7,9 @@ class Constants {
|
|||||||
static const String appKey = 'dfca71928277209b';
|
static const String appKey = 'dfca71928277209b';
|
||||||
// 59b43e04ad6965f34319062b478f83dd TV端
|
// 59b43e04ad6965f34319062b478f83dd TV端
|
||||||
static const String appSec = 'b5475a8825547a4fc26c7d518eaaa02e';
|
static const String appSec = 'b5475a8825547a4fc26c7d518eaaa02e';
|
||||||
static const String thirdSign = '04224646d1fea004e79606d3b038c84a';
|
// static const String thirdSign = '04224646d1fea004e79606d3b038c84a';
|
||||||
static const String thirdApi =
|
// static const String thirdApi =
|
||||||
'https://www.mcbbs.net/template/mcbbs/image/special_photo_bg.png';
|
// 'https://www.mcbbs.net/template/mcbbs/image/special_photo_bg.png';
|
||||||
|
|
||||||
static const String traceId =
|
static const String traceId =
|
||||||
'11111111111111111111111111111111:1111111111111111:0:0';
|
'11111111111111111111111111111111:1111111111111111:0:0';
|
||||||
@@ -41,9 +27,7 @@ class Constants {
|
|||||||
'{"appId":1,"platform":3,"version":"8.43.0","abtest":""}';
|
'{"appId":1,"platform":3,"version":"8.43.0","abtest":""}';
|
||||||
|
|
||||||
static const baseHeaders = {
|
static const baseHeaders = {
|
||||||
'connection': 'keep-alive',
|
// 'referer': HttpString.baseUrl,
|
||||||
'accept-encoding': 'br,gzip',
|
|
||||||
'referer': HttpString.baseUrl,
|
|
||||||
'env': 'prod',
|
'env': 'prod',
|
||||||
'app-key': 'android64',
|
'app-key': 'android64',
|
||||||
'x-bili-aurora-zone': 'sh001',
|
'x-bili-aurora-zone': 'sh001',
|
||||||
@@ -55,243 +39,6 @@ class Constants {
|
|||||||
|
|
||||||
static const goodsUrlPrefix = "https://gaoneng.bilibili.com/tetris";
|
static const goodsUrlPrefix = "https://gaoneng.bilibili.com/tetris";
|
||||||
|
|
||||||
// 超分辨率滤镜
|
// 'itemOpusStyle,opusBigCover,onlyfansVote,endFooterHidden,decorationCard,onlyfansAssetsV2,ugcDelete,onlyfansQaCard,editable,opusPrivateVisible,avatarAutoTheme,sunflowerStyle,cardsEnhance,eva3CardOpus,eva3CardVideo,eva3CardComment,eva3CardVote,eva3CardUser'
|
||||||
static const List<String> mpvAnime4KShaders = [
|
static const dynFeatures = 'itemOpusStyle,listOnlyfans,onlyfansQaCard';
|
||||||
'Anime4K_Clamp_Highlights.glsl',
|
|
||||||
'Anime4K_Restore_CNN_VL.glsl',
|
|
||||||
'Anime4K_Upscale_CNN_x2_VL.glsl',
|
|
||||||
'Anime4K_AutoDownscalePre_x2.glsl',
|
|
||||||
'Anime4K_AutoDownscalePre_x4.glsl',
|
|
||||||
'Anime4K_Upscale_CNN_x2_M.glsl',
|
|
||||||
];
|
|
||||||
|
|
||||||
// 超分辨率滤镜 (轻量)
|
|
||||||
static const mpvAnime4KShadersLite = [
|
|
||||||
'Anime4K_Clamp_Highlights.glsl',
|
|
||||||
'Anime4K_Restore_CNN_M.glsl',
|
|
||||||
'Anime4K_Restore_CNN_S.glsl',
|
|
||||||
'Anime4K_Upscale_CNN_x2_M.glsl',
|
|
||||||
'Anime4K_AutoDownscalePre_x2.glsl',
|
|
||||||
'Anime4K_AutoDownscalePre_x4.glsl',
|
|
||||||
'Anime4K_Upscale_CNN_x2_S.glsl',
|
|
||||||
];
|
|
||||||
|
|
||||||
//内容来自 https://passport.bilibili.com/web/generic/country/list
|
|
||||||
static const internationalDialingPrefix = [
|
|
||||||
(id: 1, cname: "中国大陆", countryId: 86),
|
|
||||||
(id: 5, cname: "中国香港特别行政区", countryId: 852),
|
|
||||||
(id: 2, cname: "中国澳门特别行政区", countryId: 853),
|
|
||||||
(id: 3, cname: "中国台湾", countryId: 886),
|
|
||||||
(id: 4, cname: "美国", countryId: 1),
|
|
||||||
(id: 6, cname: "比利时", countryId: 32),
|
|
||||||
(id: 7, cname: "澳大利亚", countryId: 61),
|
|
||||||
(id: 8, cname: "法国", countryId: 33),
|
|
||||||
(id: 9, cname: "加拿大", countryId: 1),
|
|
||||||
(id: 10, cname: "日本", countryId: 81),
|
|
||||||
(id: 11, cname: "新加坡", countryId: 65),
|
|
||||||
(id: 12, cname: "韩国", countryId: 82),
|
|
||||||
(id: 13, cname: "马来西亚", countryId: 60),
|
|
||||||
(id: 14, cname: "英国", countryId: 44),
|
|
||||||
(id: 15, cname: "意大利", countryId: 39),
|
|
||||||
(id: 16, cname: "德国", countryId: 49),
|
|
||||||
(id: 18, cname: "俄罗斯", countryId: 7),
|
|
||||||
(id: 19, cname: "新西兰", countryId: 64),
|
|
||||||
(id: 153, cname: "瓦利斯群岛和富图纳群岛", countryId: 1681),
|
|
||||||
(id: 152, cname: "葡萄牙", countryId: 351),
|
|
||||||
(id: 151, cname: "帕劳", countryId: 680),
|
|
||||||
(id: 150, cname: "诺福克岛", countryId: 672),
|
|
||||||
(id: 149, cname: "挪威", countryId: 47),
|
|
||||||
(id: 148, cname: "纽埃岛", countryId: 683),
|
|
||||||
(id: 147, cname: "尼日利亚", countryId: 234),
|
|
||||||
(id: 146, cname: "尼日尔", countryId: 227),
|
|
||||||
(id: 145, cname: "尼加拉瓜", countryId: 505),
|
|
||||||
(id: 144, cname: "尼泊尔", countryId: 977),
|
|
||||||
(id: 143, cname: "瑙鲁", countryId: 674),
|
|
||||||
(id: 154, cname: "格鲁吉亚", countryId: 995),
|
|
||||||
(id: 155, cname: "瑞典", countryId: 46),
|
|
||||||
(id: 165, cname: "沙特阿拉伯", countryId: 966),
|
|
||||||
(id: 164, cname: "桑给巴尔岛", countryId: 259),
|
|
||||||
(id: 163, cname: "塞舌尔共和国", countryId: 248),
|
|
||||||
(id: 162, cname: "塞浦路斯", countryId: 357),
|
|
||||||
(id: 161, cname: "塞内加尔", countryId: 221),
|
|
||||||
(id: 160, cname: "塞拉利昂", countryId: 232),
|
|
||||||
(id: 159, cname: "萨摩亚,东部", countryId: 684),
|
|
||||||
(id: 158, cname: "萨摩亚,西部", countryId: 685),
|
|
||||||
(id: 157, cname: "萨尔瓦多", countryId: 503),
|
|
||||||
(id: 156, cname: "瑞士", countryId: 41),
|
|
||||||
(id: 166, cname: "圣多美和普林西比", countryId: 239),
|
|
||||||
(id: 142, cname: "塞尔维亚", countryId: 381),
|
|
||||||
(id: 141, cname: "南非", countryId: 27),
|
|
||||||
(id: 128, cname: "毛里塔尼亚", countryId: 222),
|
|
||||||
(id: 127, cname: "毛里求斯", countryId: 230),
|
|
||||||
(id: 126, cname: "马歇尔岛", countryId: 692),
|
|
||||||
(id: 125, cname: "马提尼克岛", countryId: 596),
|
|
||||||
(id: 124, cname: "马其顿", countryId: 389),
|
|
||||||
(id: 123, cname: "马里亚纳岛", countryId: 1670),
|
|
||||||
(id: 122, cname: "马里", countryId: 223),
|
|
||||||
(id: 121, cname: "马拉维", countryId: 265),
|
|
||||||
(id: 120, cname: "马耳他", countryId: 356),
|
|
||||||
(id: 119, cname: "马尔代夫", countryId: 960),
|
|
||||||
(id: 129, cname: "蒙古", countryId: 976),
|
|
||||||
(id: 130, cname: "蒙特塞拉特岛", countryId: 1664),
|
|
||||||
(id: 140, cname: "纳米比亚", countryId: 264),
|
|
||||||
(id: 139, cname: "墨西哥", countryId: 52),
|
|
||||||
(id: 138, cname: "莫桑比克", countryId: 258),
|
|
||||||
(id: 137, cname: "摩纳哥", countryId: 377),
|
|
||||||
(id: 136, cname: "摩洛哥", countryId: 212),
|
|
||||||
(id: 135, cname: "摩尔多瓦", countryId: 373),
|
|
||||||
(id: 134, cname: "缅甸", countryId: 95),
|
|
||||||
(id: 133, cname: "密克罗尼西亚", countryId: 691),
|
|
||||||
(id: 132, cname: "秘鲁", countryId: 51),
|
|
||||||
(id: 131, cname: "孟加拉国", countryId: 880),
|
|
||||||
(id: 118, cname: "马达加斯加", countryId: 261),
|
|
||||||
(id: 167, cname: "圣卢西亚", countryId: 1784),
|
|
||||||
(id: 216, cname: "智利", countryId: 56),
|
|
||||||
(id: 203, cname: "牙买加", countryId: 1876),
|
|
||||||
(id: 202, cname: "叙利亚", countryId: 963),
|
|
||||||
(id: 201, cname: "匈牙利", countryId: 36),
|
|
||||||
(id: 200, cname: "科特迪瓦", countryId: 225),
|
|
||||||
(id: 199, cname: "希腊", countryId: 30),
|
|
||||||
(id: 198, cname: "西班牙", countryId: 34),
|
|
||||||
(id: 197, cname: "乌兹别克斯坦", countryId: 998),
|
|
||||||
(id: 196, cname: "乌拉圭", countryId: 598),
|
|
||||||
(id: 195, cname: "乌克兰", countryId: 380),
|
|
||||||
(id: 194, cname: "乌干达", countryId: 256),
|
|
||||||
(id: 204, cname: "亚美尼亚", countryId: 374),
|
|
||||||
(id: 205, cname: "也门", countryId: 967),
|
|
||||||
(id: 215, cname: "直布罗陀", countryId: 350),
|
|
||||||
(id: 214, cname: "乍得", countryId: 235),
|
|
||||||
(id: 213, cname: "赞比亚", countryId: 260),
|
|
||||||
(id: 212, cname: "越南", countryId: 84),
|
|
||||||
(id: 211, cname: "约旦", countryId: 962),
|
|
||||||
(id: 210, cname: "印尼", countryId: 62),
|
|
||||||
(id: 209, cname: "印度", countryId: 91),
|
|
||||||
(id: 208, cname: "以色列", countryId: 972),
|
|
||||||
(id: 207, cname: "伊朗", countryId: 98),
|
|
||||||
(id: 206, cname: "伊拉克", countryId: 964),
|
|
||||||
(id: 193, cname: "文莱", countryId: 673),
|
|
||||||
(id: 192, cname: "委内瑞拉", countryId: 58),
|
|
||||||
(id: 191, cname: "维珍群岛(英属)", countryId: 1284),
|
|
||||||
(id: 178, cname: "泰国", countryId: 66),
|
|
||||||
(id: 177, cname: "索马里", countryId: 252),
|
|
||||||
(id: 176, cname: "所罗门群岛", countryId: 677),
|
|
||||||
(id: 175, cname: "苏里南", countryId: 597),
|
|
||||||
(id: 174, cname: "苏丹", countryId: 249),
|
|
||||||
(id: 173, cname: "斯威士兰", countryId: 268),
|
|
||||||
(id: 172, cname: "斯洛文尼亚", countryId: 386),
|
|
||||||
(id: 171, cname: "斯洛伐克", countryId: 421),
|
|
||||||
(id: 170, cname: "斯里兰卡", countryId: 94),
|
|
||||||
(id: 169, cname: "圣皮埃尔和密克隆群岛", countryId: 508),
|
|
||||||
(id: 179, cname: "坦桑尼亚", countryId: 255),
|
|
||||||
(id: 180, cname: "汤加", countryId: 676),
|
|
||||||
(id: 190, cname: "维珍群岛(美属)", countryId: 1340),
|
|
||||||
(id: 189, cname: "瓦努阿图", countryId: 678),
|
|
||||||
(id: 188, cname: "托克劳岛", countryId: 690),
|
|
||||||
(id: 187, cname: "土库曼斯坦", countryId: 993),
|
|
||||||
(id: 186, cname: "土耳其", countryId: 90),
|
|
||||||
(id: 185, cname: "图瓦卢", countryId: 688),
|
|
||||||
(id: 184, cname: "突尼斯", countryId: 216),
|
|
||||||
(id: 183, cname: "阿森松岛", countryId: 247),
|
|
||||||
(id: 182, cname: "特立尼达和多巴哥", countryId: 1868),
|
|
||||||
(id: 181, cname: "特克斯和凯科斯", countryId: 1649),
|
|
||||||
(id: 168, cname: "圣马力诺", countryId: 378),
|
|
||||||
(id: 67, cname: "法属圭亚那", countryId: 594),
|
|
||||||
(id: 54, cname: "不丹", countryId: 975),
|
|
||||||
(id: 53, cname: "博茨瓦纳", countryId: 267),
|
|
||||||
(id: 52, cname: "伯利兹", countryId: 501),
|
|
||||||
(id: 51, cname: "玻利维亚", countryId: 591),
|
|
||||||
(id: 50, cname: "波兰", countryId: 48),
|
|
||||||
(id: 49, cname: "波黑", countryId: 387),
|
|
||||||
(id: 48, cname: "波多黎各", countryId: 1787),
|
|
||||||
(id: 47, cname: "冰岛", countryId: 354),
|
|
||||||
(id: 46, cname: "贝宁", countryId: 229),
|
|
||||||
(id: 45, cname: "保加利亚", countryId: 359),
|
|
||||||
(id: 55, cname: "布基纳法索", countryId: 226),
|
|
||||||
(id: 56, cname: "布隆迪", countryId: 257),
|
|
||||||
(id: 66, cname: "法属波利尼西亚", countryId: 689),
|
|
||||||
(id: 65, cname: "法罗岛", countryId: 298),
|
|
||||||
(id: 64, cname: "厄立特里亚", countryId: 291),
|
|
||||||
(id: 63, cname: "厄瓜多尔", countryId: 593),
|
|
||||||
(id: 62, cname: "多米尼加代表", countryId: 1809),
|
|
||||||
(id: 61, cname: "多米尼加", countryId: 1767),
|
|
||||||
(id: 60, cname: "多哥", countryId: 228),
|
|
||||||
(id: 59, cname: "迪戈加西亚岛", countryId: 246),
|
|
||||||
(id: 58, cname: "丹麦", countryId: 45),
|
|
||||||
(id: 57, cname: "赤道几内亚", countryId: 240),
|
|
||||||
(id: 44, cname: "百慕大群岛", countryId: 1441),
|
|
||||||
(id: 43, cname: "白俄罗斯", countryId: 375),
|
|
||||||
(id: 42, cname: "巴西", countryId: 55),
|
|
||||||
(id: 29, cname: "爱尔兰", countryId: 353),
|
|
||||||
(id: 28, cname: "埃塞俄比亚", countryId: 251),
|
|
||||||
(id: 27, cname: "埃及", countryId: 20),
|
|
||||||
(id: 26, cname: "阿塞拜疆", countryId: 994),
|
|
||||||
(id: 25, cname: "阿曼", countryId: 968),
|
|
||||||
(id: 24, cname: "阿联酋", countryId: 971),
|
|
||||||
(id: 23, cname: "阿根廷", countryId: 54),
|
|
||||||
(id: 22, cname: "阿富汗", countryId: 93),
|
|
||||||
(id: 21, cname: "阿尔及利亚", countryId: 213),
|
|
||||||
(id: 20, cname: "阿尔巴尼亚", countryId: 355),
|
|
||||||
(id: 30, cname: "爱沙尼亚", countryId: 372),
|
|
||||||
(id: 31, cname: "安道尔", countryId: 376),
|
|
||||||
(id: 41, cname: "巴拿马", countryId: 507),
|
|
||||||
(id: 40, cname: "巴林", countryId: 973),
|
|
||||||
(id: 39, cname: "巴拉圭", countryId: 595),
|
|
||||||
(id: 38, cname: "巴基斯坦", countryId: 92),
|
|
||||||
(id: 37, cname: "巴哈马群岛", countryId: 1242),
|
|
||||||
(id: 36, cname: "巴布亚新几内亚", countryId: 675),
|
|
||||||
(id: 35, cname: "巴巴多斯", countryId: 1246),
|
|
||||||
(id: 34, cname: "奥地利", countryId: 43),
|
|
||||||
(id: 33, cname: "安提瓜岛和巴布达", countryId: 1268),
|
|
||||||
(id: 32, cname: "安哥拉", countryId: 244),
|
|
||||||
(id: 68, cname: "非洲中部", countryId: 236),
|
|
||||||
(id: 117, cname: "罗马尼亚", countryId: 40),
|
|
||||||
(id: 104, cname: "科威特", countryId: 965),
|
|
||||||
(id: 103, cname: "科摩罗", countryId: 269),
|
|
||||||
(id: 102, cname: "开曼群岛", countryId: 1345),
|
|
||||||
(id: 101, cname: "卡塔尔", countryId: 974),
|
|
||||||
(id: 100, cname: "喀麦隆", countryId: 237),
|
|
||||||
(id: 99, cname: "聚会岛", countryId: 262),
|
|
||||||
(id: 98, cname: "津巴布韦", countryId: 263),
|
|
||||||
(id: 97, cname: "捷克", countryId: 420),
|
|
||||||
(id: 96, cname: "柬埔寨", countryId: 855),
|
|
||||||
(id: 95, cname: "加蓬", countryId: 241),
|
|
||||||
(id: 105, cname: "克罗地亚", countryId: 385),
|
|
||||||
(id: 106, cname: "肯尼亚", countryId: 254),
|
|
||||||
(id: 116, cname: "卢旺达", countryId: 250),
|
|
||||||
(id: 115, cname: "卢森堡", countryId: 352),
|
|
||||||
(id: 114, cname: "利比亚", countryId: 218),
|
|
||||||
(id: 113, cname: "利比里亚", countryId: 231),
|
|
||||||
(id: 112, cname: "立陶宛", countryId: 370),
|
|
||||||
(id: 111, cname: "黎巴嫩", countryId: 961),
|
|
||||||
(id: 110, cname: "老挝", countryId: 856),
|
|
||||||
(id: 109, cname: "莱索托", countryId: 266),
|
|
||||||
(id: 108, cname: "拉脱维亚", countryId: 371),
|
|
||||||
(id: 107, cname: "库克岛", countryId: 682),
|
|
||||||
(id: 94, cname: "加纳", countryId: 233),
|
|
||||||
(id: 93, cname: "几内亚比绍", countryId: 245),
|
|
||||||
(id: 92, cname: "几内亚", countryId: 224),
|
|
||||||
(id: 79, cname: "格林纳达", countryId: 1473),
|
|
||||||
(id: 78, cname: "哥斯达黎加", countryId: 506),
|
|
||||||
(id: 77, cname: "哥伦比亚", countryId: 57),
|
|
||||||
(id: 76, cname: "刚果(金)", countryId: 243),
|
|
||||||
(id: 75, cname: "刚果", countryId: 242),
|
|
||||||
(id: 74, cname: "冈比亚", countryId: 220),
|
|
||||||
(id: 73, cname: "福克兰岛", countryId: 500),
|
|
||||||
(id: 72, cname: "佛得角", countryId: 238),
|
|
||||||
(id: 71, cname: "芬兰", countryId: 358),
|
|
||||||
(id: 70, cname: "斐济", countryId: 679),
|
|
||||||
(id: 80, cname: "格陵兰岛", countryId: 299),
|
|
||||||
(id: 81, cname: "古巴", countryId: 53),
|
|
||||||
(id: 91, cname: "吉尔吉斯斯坦", countryId: 996),
|
|
||||||
(id: 90, cname: "吉布提", countryId: 253),
|
|
||||||
(id: 89, cname: "基里巴斯", countryId: 686),
|
|
||||||
(id: 88, cname: "维克岛", countryId: 1808),
|
|
||||||
(id: 87, cname: "洪都拉斯", countryId: 504),
|
|
||||||
(id: 86, cname: "荷兰", countryId: 31),
|
|
||||||
(id: 85, cname: "朝鲜", countryId: 850),
|
|
||||||
(id: 84, cname: "海地", countryId: 509),
|
|
||||||
(id: 83, cname: "关岛", countryId: 1671),
|
|
||||||
(id: 82, cname: "瓜德罗普岛", countryId: 590),
|
|
||||||
(id: 69, cname: "菲律宾", countryId: 63),
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
|
|||||||
220
lib/common/dial_prefix.dart
Normal file
@@ -0,0 +1,220 @@
|
|||||||
|
abstract final class Login {
|
||||||
|
//内容来自 https://passport.bilibili.com/web/generic/country/list
|
||||||
|
static const dialPrefix = [
|
||||||
|
(id: 1, cname: "中国大陆", countryId: 86),
|
||||||
|
(id: 5, cname: "中国香港特别行政区", countryId: 852),
|
||||||
|
(id: 2, cname: "中国澳门特别行政区", countryId: 853),
|
||||||
|
(id: 3, cname: "中国台湾", countryId: 886),
|
||||||
|
(id: 4, cname: "美国", countryId: 1),
|
||||||
|
(id: 6, cname: "比利时", countryId: 32),
|
||||||
|
(id: 7, cname: "澳大利亚", countryId: 61),
|
||||||
|
(id: 8, cname: "法国", countryId: 33),
|
||||||
|
(id: 9, cname: "加拿大", countryId: 1),
|
||||||
|
(id: 10, cname: "日本", countryId: 81),
|
||||||
|
(id: 11, cname: "新加坡", countryId: 65),
|
||||||
|
(id: 12, cname: "韩国", countryId: 82),
|
||||||
|
(id: 13, cname: "马来西亚", countryId: 60),
|
||||||
|
(id: 14, cname: "英国", countryId: 44),
|
||||||
|
(id: 15, cname: "意大利", countryId: 39),
|
||||||
|
(id: 16, cname: "德国", countryId: 49),
|
||||||
|
(id: 18, cname: "俄罗斯", countryId: 7),
|
||||||
|
(id: 19, cname: "新西兰", countryId: 64),
|
||||||
|
(id: 153, cname: "瓦利斯群岛和富图纳群岛", countryId: 1681),
|
||||||
|
(id: 152, cname: "葡萄牙", countryId: 351),
|
||||||
|
(id: 151, cname: "帕劳", countryId: 680),
|
||||||
|
(id: 150, cname: "诺福克岛", countryId: 672),
|
||||||
|
(id: 149, cname: "挪威", countryId: 47),
|
||||||
|
(id: 148, cname: "纽埃岛", countryId: 683),
|
||||||
|
(id: 147, cname: "尼日利亚", countryId: 234),
|
||||||
|
(id: 146, cname: "尼日尔", countryId: 227),
|
||||||
|
(id: 145, cname: "尼加拉瓜", countryId: 505),
|
||||||
|
(id: 144, cname: "尼泊尔", countryId: 977),
|
||||||
|
(id: 143, cname: "瑙鲁", countryId: 674),
|
||||||
|
(id: 154, cname: "格鲁吉亚", countryId: 995),
|
||||||
|
(id: 155, cname: "瑞典", countryId: 46),
|
||||||
|
(id: 165, cname: "沙特阿拉伯", countryId: 966),
|
||||||
|
(id: 164, cname: "桑给巴尔岛", countryId: 259),
|
||||||
|
(id: 163, cname: "塞舌尔共和国", countryId: 248),
|
||||||
|
(id: 162, cname: "塞浦路斯", countryId: 357),
|
||||||
|
(id: 161, cname: "塞内加尔", countryId: 221),
|
||||||
|
(id: 160, cname: "塞拉利昂", countryId: 232),
|
||||||
|
(id: 159, cname: "萨摩亚,东部", countryId: 684),
|
||||||
|
(id: 158, cname: "萨摩亚,西部", countryId: 685),
|
||||||
|
(id: 157, cname: "萨尔瓦多", countryId: 503),
|
||||||
|
(id: 156, cname: "瑞士", countryId: 41),
|
||||||
|
(id: 166, cname: "圣多美和普林西比", countryId: 239),
|
||||||
|
(id: 142, cname: "塞尔维亚", countryId: 381),
|
||||||
|
(id: 141, cname: "南非", countryId: 27),
|
||||||
|
(id: 128, cname: "毛里塔尼亚", countryId: 222),
|
||||||
|
(id: 127, cname: "毛里求斯", countryId: 230),
|
||||||
|
(id: 126, cname: "马歇尔岛", countryId: 692),
|
||||||
|
(id: 125, cname: "马提尼克岛", countryId: 596),
|
||||||
|
(id: 124, cname: "马其顿", countryId: 389),
|
||||||
|
(id: 123, cname: "马里亚纳岛", countryId: 1670),
|
||||||
|
(id: 122, cname: "马里", countryId: 223),
|
||||||
|
(id: 121, cname: "马拉维", countryId: 265),
|
||||||
|
(id: 120, cname: "马耳他", countryId: 356),
|
||||||
|
(id: 119, cname: "马尔代夫", countryId: 960),
|
||||||
|
(id: 129, cname: "蒙古", countryId: 976),
|
||||||
|
(id: 130, cname: "蒙特塞拉特岛", countryId: 1664),
|
||||||
|
(id: 140, cname: "纳米比亚", countryId: 264),
|
||||||
|
(id: 139, cname: "墨西哥", countryId: 52),
|
||||||
|
(id: 138, cname: "莫桑比克", countryId: 258),
|
||||||
|
(id: 137, cname: "摩纳哥", countryId: 377),
|
||||||
|
(id: 136, cname: "摩洛哥", countryId: 212),
|
||||||
|
(id: 135, cname: "摩尔多瓦", countryId: 373),
|
||||||
|
(id: 134, cname: "缅甸", countryId: 95),
|
||||||
|
(id: 133, cname: "密克罗尼西亚", countryId: 691),
|
||||||
|
(id: 132, cname: "秘鲁", countryId: 51),
|
||||||
|
(id: 131, cname: "孟加拉国", countryId: 880),
|
||||||
|
(id: 118, cname: "马达加斯加", countryId: 261),
|
||||||
|
(id: 167, cname: "圣卢西亚", countryId: 1784),
|
||||||
|
(id: 216, cname: "智利", countryId: 56),
|
||||||
|
(id: 203, cname: "牙买加", countryId: 1876),
|
||||||
|
(id: 202, cname: "叙利亚", countryId: 963),
|
||||||
|
(id: 201, cname: "匈牙利", countryId: 36),
|
||||||
|
(id: 200, cname: "科特迪瓦", countryId: 225),
|
||||||
|
(id: 199, cname: "希腊", countryId: 30),
|
||||||
|
(id: 198, cname: "西班牙", countryId: 34),
|
||||||
|
(id: 197, cname: "乌兹别克斯坦", countryId: 998),
|
||||||
|
(id: 196, cname: "乌拉圭", countryId: 598),
|
||||||
|
(id: 195, cname: "乌克兰", countryId: 380),
|
||||||
|
(id: 194, cname: "乌干达", countryId: 256),
|
||||||
|
(id: 204, cname: "亚美尼亚", countryId: 374),
|
||||||
|
(id: 205, cname: "也门", countryId: 967),
|
||||||
|
(id: 215, cname: "直布罗陀", countryId: 350),
|
||||||
|
(id: 214, cname: "乍得", countryId: 235),
|
||||||
|
(id: 213, cname: "赞比亚", countryId: 260),
|
||||||
|
(id: 212, cname: "越南", countryId: 84),
|
||||||
|
(id: 211, cname: "约旦", countryId: 962),
|
||||||
|
(id: 210, cname: "印尼", countryId: 62),
|
||||||
|
(id: 209, cname: "印度", countryId: 91),
|
||||||
|
(id: 208, cname: "以色列", countryId: 972),
|
||||||
|
(id: 207, cname: "伊朗", countryId: 98),
|
||||||
|
(id: 206, cname: "伊拉克", countryId: 964),
|
||||||
|
(id: 193, cname: "文莱", countryId: 673),
|
||||||
|
(id: 192, cname: "委内瑞拉", countryId: 58),
|
||||||
|
(id: 191, cname: "维珍群岛(英属)", countryId: 1284),
|
||||||
|
(id: 178, cname: "泰国", countryId: 66),
|
||||||
|
(id: 177, cname: "索马里", countryId: 252),
|
||||||
|
(id: 176, cname: "所罗门群岛", countryId: 677),
|
||||||
|
(id: 175, cname: "苏里南", countryId: 597),
|
||||||
|
(id: 174, cname: "苏丹", countryId: 249),
|
||||||
|
(id: 173, cname: "斯威士兰", countryId: 268),
|
||||||
|
(id: 172, cname: "斯洛文尼亚", countryId: 386),
|
||||||
|
(id: 171, cname: "斯洛伐克", countryId: 421),
|
||||||
|
(id: 170, cname: "斯里兰卡", countryId: 94),
|
||||||
|
(id: 169, cname: "圣皮埃尔和密克隆群岛", countryId: 508),
|
||||||
|
(id: 179, cname: "坦桑尼亚", countryId: 255),
|
||||||
|
(id: 180, cname: "汤加", countryId: 676),
|
||||||
|
(id: 190, cname: "维珍群岛(美属)", countryId: 1340),
|
||||||
|
(id: 189, cname: "瓦努阿图", countryId: 678),
|
||||||
|
(id: 188, cname: "托克劳岛", countryId: 690),
|
||||||
|
(id: 187, cname: "土库曼斯坦", countryId: 993),
|
||||||
|
(id: 186, cname: "土耳其", countryId: 90),
|
||||||
|
(id: 185, cname: "图瓦卢", countryId: 688),
|
||||||
|
(id: 184, cname: "突尼斯", countryId: 216),
|
||||||
|
(id: 183, cname: "阿森松岛", countryId: 247),
|
||||||
|
(id: 182, cname: "特立尼达和多巴哥", countryId: 1868),
|
||||||
|
(id: 181, cname: "特克斯和凯科斯", countryId: 1649),
|
||||||
|
(id: 168, cname: "圣马力诺", countryId: 378),
|
||||||
|
(id: 67, cname: "法属圭亚那", countryId: 594),
|
||||||
|
(id: 54, cname: "不丹", countryId: 975),
|
||||||
|
(id: 53, cname: "博茨瓦纳", countryId: 267),
|
||||||
|
(id: 52, cname: "伯利兹", countryId: 501),
|
||||||
|
(id: 51, cname: "玻利维亚", countryId: 591),
|
||||||
|
(id: 50, cname: "波兰", countryId: 48),
|
||||||
|
(id: 49, cname: "波黑", countryId: 387),
|
||||||
|
(id: 48, cname: "波多黎各", countryId: 1787),
|
||||||
|
(id: 47, cname: "冰岛", countryId: 354),
|
||||||
|
(id: 46, cname: "贝宁", countryId: 229),
|
||||||
|
(id: 45, cname: "保加利亚", countryId: 359),
|
||||||
|
(id: 55, cname: "布基纳法索", countryId: 226),
|
||||||
|
(id: 56, cname: "布隆迪", countryId: 257),
|
||||||
|
(id: 66, cname: "法属波利尼西亚", countryId: 689),
|
||||||
|
(id: 65, cname: "法罗岛", countryId: 298),
|
||||||
|
(id: 64, cname: "厄立特里亚", countryId: 291),
|
||||||
|
(id: 63, cname: "厄瓜多尔", countryId: 593),
|
||||||
|
(id: 62, cname: "多米尼加代表", countryId: 1809),
|
||||||
|
(id: 61, cname: "多米尼加", countryId: 1767),
|
||||||
|
(id: 60, cname: "多哥", countryId: 228),
|
||||||
|
(id: 59, cname: "迪戈加西亚岛", countryId: 246),
|
||||||
|
(id: 58, cname: "丹麦", countryId: 45),
|
||||||
|
(id: 57, cname: "赤道几内亚", countryId: 240),
|
||||||
|
(id: 44, cname: "百慕大群岛", countryId: 1441),
|
||||||
|
(id: 43, cname: "白俄罗斯", countryId: 375),
|
||||||
|
(id: 42, cname: "巴西", countryId: 55),
|
||||||
|
(id: 29, cname: "爱尔兰", countryId: 353),
|
||||||
|
(id: 28, cname: "埃塞俄比亚", countryId: 251),
|
||||||
|
(id: 27, cname: "埃及", countryId: 20),
|
||||||
|
(id: 26, cname: "阿塞拜疆", countryId: 994),
|
||||||
|
(id: 25, cname: "阿曼", countryId: 968),
|
||||||
|
(id: 24, cname: "阿联酋", countryId: 971),
|
||||||
|
(id: 23, cname: "阿根廷", countryId: 54),
|
||||||
|
(id: 22, cname: "阿富汗", countryId: 93),
|
||||||
|
(id: 21, cname: "阿尔及利亚", countryId: 213),
|
||||||
|
(id: 20, cname: "阿尔巴尼亚", countryId: 355),
|
||||||
|
(id: 30, cname: "爱沙尼亚", countryId: 372),
|
||||||
|
(id: 31, cname: "安道尔", countryId: 376),
|
||||||
|
(id: 41, cname: "巴拿马", countryId: 507),
|
||||||
|
(id: 40, cname: "巴林", countryId: 973),
|
||||||
|
(id: 39, cname: "巴拉圭", countryId: 595),
|
||||||
|
(id: 38, cname: "巴基斯坦", countryId: 92),
|
||||||
|
(id: 37, cname: "巴哈马群岛", countryId: 1242),
|
||||||
|
(id: 36, cname: "巴布亚新几内亚", countryId: 675),
|
||||||
|
(id: 35, cname: "巴巴多斯", countryId: 1246),
|
||||||
|
(id: 34, cname: "奥地利", countryId: 43),
|
||||||
|
(id: 33, cname: "安提瓜岛和巴布达", countryId: 1268),
|
||||||
|
(id: 32, cname: "安哥拉", countryId: 244),
|
||||||
|
(id: 68, cname: "非洲中部", countryId: 236),
|
||||||
|
(id: 117, cname: "罗马尼亚", countryId: 40),
|
||||||
|
(id: 104, cname: "科威特", countryId: 965),
|
||||||
|
(id: 103, cname: "科摩罗", countryId: 269),
|
||||||
|
(id: 102, cname: "开曼群岛", countryId: 1345),
|
||||||
|
(id: 101, cname: "卡塔尔", countryId: 974),
|
||||||
|
(id: 100, cname: "喀麦隆", countryId: 237),
|
||||||
|
(id: 99, cname: "聚会岛", countryId: 262),
|
||||||
|
(id: 98, cname: "津巴布韦", countryId: 263),
|
||||||
|
(id: 97, cname: "捷克", countryId: 420),
|
||||||
|
(id: 96, cname: "柬埔寨", countryId: 855),
|
||||||
|
(id: 95, cname: "加蓬", countryId: 241),
|
||||||
|
(id: 105, cname: "克罗地亚", countryId: 385),
|
||||||
|
(id: 106, cname: "肯尼亚", countryId: 254),
|
||||||
|
(id: 116, cname: "卢旺达", countryId: 250),
|
||||||
|
(id: 115, cname: "卢森堡", countryId: 352),
|
||||||
|
(id: 114, cname: "利比亚", countryId: 218),
|
||||||
|
(id: 113, cname: "利比里亚", countryId: 231),
|
||||||
|
(id: 112, cname: "立陶宛", countryId: 370),
|
||||||
|
(id: 111, cname: "黎巴嫩", countryId: 961),
|
||||||
|
(id: 110, cname: "老挝", countryId: 856),
|
||||||
|
(id: 109, cname: "莱索托", countryId: 266),
|
||||||
|
(id: 108, cname: "拉脱维亚", countryId: 371),
|
||||||
|
(id: 107, cname: "库克岛", countryId: 682),
|
||||||
|
(id: 94, cname: "加纳", countryId: 233),
|
||||||
|
(id: 93, cname: "几内亚比绍", countryId: 245),
|
||||||
|
(id: 92, cname: "几内亚", countryId: 224),
|
||||||
|
(id: 79, cname: "格林纳达", countryId: 1473),
|
||||||
|
(id: 78, cname: "哥斯达黎加", countryId: 506),
|
||||||
|
(id: 77, cname: "哥伦比亚", countryId: 57),
|
||||||
|
(id: 76, cname: "刚果(金)", countryId: 243),
|
||||||
|
(id: 75, cname: "刚果", countryId: 242),
|
||||||
|
(id: 74, cname: "冈比亚", countryId: 220),
|
||||||
|
(id: 73, cname: "福克兰岛", countryId: 500),
|
||||||
|
(id: 72, cname: "佛得角", countryId: 238),
|
||||||
|
(id: 71, cname: "芬兰", countryId: 358),
|
||||||
|
(id: 70, cname: "斐济", countryId: 679),
|
||||||
|
(id: 80, cname: "格陵兰岛", countryId: 299),
|
||||||
|
(id: 81, cname: "古巴", countryId: 53),
|
||||||
|
(id: 91, cname: "吉尔吉斯斯坦", countryId: 996),
|
||||||
|
(id: 90, cname: "吉布提", countryId: 253),
|
||||||
|
(id: 89, cname: "基里巴斯", countryId: 686),
|
||||||
|
(id: 88, cname: "维克岛", countryId: 1808),
|
||||||
|
(id: 87, cname: "洪都拉斯", countryId: 504),
|
||||||
|
(id: 86, cname: "荷兰", countryId: 31),
|
||||||
|
(id: 85, cname: "朝鲜", countryId: 850),
|
||||||
|
(id: 84, cname: "海地", countryId: 509),
|
||||||
|
(id: 83, cname: "关岛", countryId: 1671),
|
||||||
|
(id: 82, cname: "瓜德罗普岛", countryId: 590),
|
||||||
|
(id: 69, cname: "菲律宾", countryId: 63),
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -9,6 +9,13 @@ class DynamicCardSkeleton extends StatelessWidget {
|
|||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final ThemeData theme = Theme.of(context);
|
final ThemeData theme = Theme.of(context);
|
||||||
final color = theme.colorScheme.onInverseSurface;
|
final color = theme.colorScheme.onInverseSurface;
|
||||||
|
final buttonStyle = TextButton.styleFrom(
|
||||||
|
tapTargetSize: .padded,
|
||||||
|
padding: const .symmetric(horizontal: 15),
|
||||||
|
foregroundColor: theme.colorScheme.outline.withValues(
|
||||||
|
alpha: 0.2,
|
||||||
|
),
|
||||||
|
);
|
||||||
return Skeleton(
|
return Skeleton(
|
||||||
child: Container(
|
child: Container(
|
||||||
padding: const EdgeInsets.only(left: 12, right: 12, top: 12),
|
padding: const EdgeInsets.only(left: 12, right: 12, top: 12),
|
||||||
@@ -86,29 +93,19 @@ class DynamicCardSkeleton extends StatelessWidget {
|
|||||||
if (GlobalData().dynamicsWaterfallFlow) const Spacer(),
|
if (GlobalData().dynamicsWaterfallFlow) const Spacer(),
|
||||||
Row(
|
Row(
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceAround,
|
mainAxisAlignment: MainAxisAlignment.spaceAround,
|
||||||
children: [
|
children: const ['转发', '评论', '点赞']
|
||||||
for (var i = 0; i < 3; i++)
|
.map(
|
||||||
TextButton.icon(
|
(e) => TextButton.icon(
|
||||||
onPressed: () {},
|
onPressed: () {},
|
||||||
icon: const Icon(
|
icon: const Icon(
|
||||||
Icons.radio_button_unchecked_outlined,
|
Icons.radio_button_unchecked_outlined,
|
||||||
size: 20,
|
size: 20,
|
||||||
),
|
|
||||||
style: TextButton.styleFrom(
|
|
||||||
padding: const EdgeInsets.fromLTRB(15, 0, 15, 0),
|
|
||||||
foregroundColor: theme.colorScheme.outline.withValues(
|
|
||||||
alpha: 0.2,
|
|
||||||
),
|
),
|
||||||
|
style: buttonStyle,
|
||||||
|
label: Text(e),
|
||||||
),
|
),
|
||||||
label: Text(
|
)
|
||||||
i == 0
|
.toList(),
|
||||||
? '转发'
|
|
||||||
: i == 1
|
|
||||||
? '评论'
|
|
||||||
: '点赞',
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import 'package:PiliPlus/common/constants.dart';
|
|
||||||
import 'package:PiliPlus/common/skeleton/skeleton.dart';
|
import 'package:PiliPlus/common/skeleton/skeleton.dart';
|
||||||
|
import 'package:PiliPlus/common/style.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
class FavPgcItemSkeleton extends StatelessWidget {
|
class FavPgcItemSkeleton extends StatelessWidget {
|
||||||
@@ -11,7 +11,7 @@ class FavPgcItemSkeleton extends StatelessWidget {
|
|||||||
return Skeleton(
|
return Skeleton(
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding: const EdgeInsets.symmetric(
|
padding: const EdgeInsets.symmetric(
|
||||||
horizontal: StyleString.safeSpace,
|
horizontal: Style.safeSpace,
|
||||||
vertical: 5,
|
vertical: 5,
|
||||||
),
|
),
|
||||||
child: Row(
|
child: Row(
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import 'package:PiliPlus/common/constants.dart';
|
|
||||||
import 'package:PiliPlus/common/skeleton/skeleton.dart';
|
import 'package:PiliPlus/common/skeleton/skeleton.dart';
|
||||||
|
import 'package:PiliPlus/common/style.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
class MediaPgcSkeleton extends StatefulWidget {
|
class MediaPgcSkeleton extends StatefulWidget {
|
||||||
@@ -15,11 +15,9 @@ class _MediaPgcSkeletonState extends State<MediaPgcSkeleton> {
|
|||||||
Color bgColor = Theme.of(context).colorScheme.onInverseSurface;
|
Color bgColor = Theme.of(context).colorScheme.onInverseSurface;
|
||||||
return Skeleton(
|
return Skeleton(
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding: const EdgeInsets.fromLTRB(
|
padding: const .symmetric(
|
||||||
StyleString.safeSpace,
|
horizontal: Style.safeSpace,
|
||||||
7,
|
vertical: 7,
|
||||||
StyleString.safeSpace,
|
|
||||||
7,
|
|
||||||
),
|
),
|
||||||
child: Row(
|
child: Row(
|
||||||
children: [
|
children: [
|
||||||
|
|||||||
@@ -1,189 +1,62 @@
|
|||||||
|
import 'dart:ui' as ui;
|
||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
class Skeleton extends StatelessWidget {
|
class Skeleton extends StatefulWidget {
|
||||||
final Widget child;
|
final Widget child;
|
||||||
|
|
||||||
const Skeleton({
|
const Skeleton({super.key, required this.child});
|
||||||
required this.child,
|
|
||||||
super.key,
|
|
||||||
});
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
State<Skeleton> createState() => _SkeletonState();
|
||||||
final color = Theme.of(context).colorScheme.surface.withAlpha(10);
|
|
||||||
var shimmerGradient = LinearGradient(
|
|
||||||
colors: [
|
|
||||||
Colors.transparent,
|
|
||||||
color,
|
|
||||||
color,
|
|
||||||
Colors.transparent,
|
|
||||||
],
|
|
||||||
stops: const [
|
|
||||||
0.1,
|
|
||||||
0.3,
|
|
||||||
0.5,
|
|
||||||
0.7,
|
|
||||||
],
|
|
||||||
begin: const Alignment(-1.0, -0.3),
|
|
||||||
end: const Alignment(1.0, 0.9),
|
|
||||||
tileMode: TileMode.clamp,
|
|
||||||
);
|
|
||||||
return Shimmer(
|
|
||||||
linearGradient: shimmerGradient,
|
|
||||||
child: ShimmerLoading(
|
|
||||||
isLoading: true,
|
|
||||||
child: child,
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class Shimmer extends StatefulWidget {
|
class _SkeletonState extends State<Skeleton>
|
||||||
static ShimmerState? of(BuildContext context) {
|
with SingleTickerProviderStateMixin {
|
||||||
return context.findAncestorStateOfType<ShimmerState>();
|
late final AnimationController _controller;
|
||||||
}
|
late Color color;
|
||||||
|
final matrix = Matrix4.identity();
|
||||||
const Shimmer({
|
|
||||||
super.key,
|
|
||||||
required this.linearGradient,
|
|
||||||
this.child,
|
|
||||||
});
|
|
||||||
|
|
||||||
final LinearGradient linearGradient;
|
|
||||||
final Widget? child;
|
|
||||||
|
|
||||||
@override
|
|
||||||
ShimmerState createState() => ShimmerState();
|
|
||||||
}
|
|
||||||
|
|
||||||
class ShimmerState extends State<Shimmer> with SingleTickerProviderStateMixin {
|
|
||||||
late AnimationController _shimmerController;
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
|
_controller = AnimationController.unbounded(vsync: this)
|
||||||
_shimmerController = AnimationController.unbounded(vsync: this)
|
..repeat(min: -0.5, max: 1.5, period: const Duration(milliseconds: 1000))
|
||||||
..repeat(min: -0.5, max: 1.5, period: const Duration(milliseconds: 1000));
|
..addListener(_setState);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void dispose() {
|
void dispose() {
|
||||||
_shimmerController.dispose();
|
_controller.dispose();
|
||||||
super.dispose();
|
super.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
LinearGradient get gradient => LinearGradient(
|
void _setState() {
|
||||||
colors: widget.linearGradient.colors,
|
setState(() {});
|
||||||
stops: widget.linearGradient.stops,
|
|
||||||
begin: widget.linearGradient.begin,
|
|
||||||
end: widget.linearGradient.end,
|
|
||||||
transform: _SlidingGradientTransform(
|
|
||||||
slidePercent: _shimmerController.value,
|
|
||||||
),
|
|
||||||
);
|
|
||||||
|
|
||||||
bool get isSized =>
|
|
||||||
(context.findRenderObject() as RenderBox?)?.hasSize ?? false;
|
|
||||||
|
|
||||||
Size get size => (context.findRenderObject() as RenderBox).size;
|
|
||||||
|
|
||||||
Offset getDescendantOffset({
|
|
||||||
required RenderBox descendant,
|
|
||||||
Offset offset = Offset.zero,
|
|
||||||
}) {
|
|
||||||
final shimmerBox = context.findRenderObject() as RenderBox;
|
|
||||||
return descendant.localToGlobal(offset, ancestor: shimmerBox);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Listenable get shimmerChanges => _shimmerController;
|
|
||||||
|
|
||||||
@override
|
|
||||||
Widget build(BuildContext context) {
|
|
||||||
return widget.child ?? const SizedBox.shrink();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class _SlidingGradientTransform extends GradientTransform {
|
|
||||||
const _SlidingGradientTransform({
|
|
||||||
required this.slidePercent,
|
|
||||||
});
|
|
||||||
|
|
||||||
final double slidePercent;
|
|
||||||
|
|
||||||
@override
|
|
||||||
Matrix4? transform(Rect bounds, {TextDirection? textDirection}) {
|
|
||||||
return Matrix4.translationValues(bounds.width * slidePercent, 0.0, 0.0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class ShimmerLoading extends StatefulWidget {
|
|
||||||
const ShimmerLoading({
|
|
||||||
super.key,
|
|
||||||
required this.isLoading,
|
|
||||||
required this.child,
|
|
||||||
});
|
|
||||||
|
|
||||||
final bool isLoading;
|
|
||||||
final Widget child;
|
|
||||||
|
|
||||||
@override
|
|
||||||
State<ShimmerLoading> createState() => _ShimmerLoadingState();
|
|
||||||
}
|
|
||||||
|
|
||||||
class _ShimmerLoadingState extends State<ShimmerLoading> {
|
|
||||||
Listenable? _shimmerChanges;
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void didChangeDependencies() {
|
void didChangeDependencies() {
|
||||||
super.didChangeDependencies();
|
super.didChangeDependencies();
|
||||||
if (_shimmerChanges != null) {
|
color = ColorScheme.of(context).surface.withAlpha(10);
|
||||||
_shimmerChanges!.removeListener(_onShimmerChange);
|
|
||||||
}
|
|
||||||
_shimmerChanges = Shimmer.of(context)?.shimmerChanges;
|
|
||||||
if (_shimmerChanges != null) {
|
|
||||||
_shimmerChanges!.addListener(_onShimmerChange);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
void dispose() {
|
|
||||||
_shimmerChanges?.removeListener(_onShimmerChange);
|
|
||||||
super.dispose();
|
|
||||||
}
|
|
||||||
|
|
||||||
void _onShimmerChange() {
|
|
||||||
if (widget.isLoading) {
|
|
||||||
setState(() {});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
if (!widget.isLoading) {
|
final colors = [Colors.transparent, color, color, Colors.transparent];
|
||||||
return widget.child;
|
|
||||||
}
|
|
||||||
|
|
||||||
final shimmer = Shimmer.of(context)!;
|
|
||||||
if (!shimmer.isSized) {
|
|
||||||
return const SizedBox.shrink();
|
|
||||||
}
|
|
||||||
final shimmerSize = shimmer.size;
|
|
||||||
final gradient = shimmer.gradient;
|
|
||||||
final offsetWithinShimmer = shimmer.getDescendantOffset(
|
|
||||||
descendant: context.findRenderObject() as RenderBox,
|
|
||||||
);
|
|
||||||
|
|
||||||
return ShaderMask(
|
return ShaderMask(
|
||||||
blendMode: BlendMode.srcATop,
|
blendMode: BlendMode.srcATop,
|
||||||
shaderCallback: (bounds) {
|
shaderCallback: (Rect bounds) {
|
||||||
return gradient.createShader(
|
final width = bounds.width;
|
||||||
Rect.fromLTWH(
|
final height = bounds.height;
|
||||||
-offsetWithinShimmer.dx,
|
matrix[12] = width * _controller.value;
|
||||||
-offsetWithinShimmer.dy,
|
return ui.Gradient.linear(
|
||||||
shimmerSize.width,
|
Offset(0, 0.35 * height),
|
||||||
shimmerSize.height,
|
Offset(width, 0.95 * height),
|
||||||
),
|
colors,
|
||||||
|
const [0.1, 0.3, 0.5, 0.7],
|
||||||
|
TileMode.clamp,
|
||||||
|
matrix.storage,
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
child: widget.child,
|
child: widget.child,
|
||||||
|
|||||||