mirror of
https://github.com/TeamNewPipe/NewPipe
synced 2025-10-01 15:40:51 +02:00
Compare commits
2319 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
c900ef036c | ||
![]() |
d088d432c5 | ||
![]() |
c9fafbe198 | ||
![]() |
2d909b0514 | ||
![]() |
c2a012553d | ||
![]() |
085f0266ac | ||
![]() |
7ede2daa3c | ||
![]() |
713c53d170 | ||
![]() |
110b3a6a8f | ||
![]() |
e12e6dd7a7 | ||
![]() |
e183fc6118 | ||
![]() |
dd57e246b8 | ||
![]() |
f4a4172369 | ||
![]() |
b96d1714b5 | ||
![]() |
dbd809b040 | ||
![]() |
ff4e6b139d | ||
![]() |
af098aaac8 | ||
![]() |
5d7e62c736 | ||
![]() |
e2ead011f5 | ||
![]() |
a067c950e1 | ||
![]() |
3369618cfa | ||
![]() |
4e9b6520e5 | ||
![]() |
a074203fae | ||
![]() |
42092e3f28 | ||
![]() |
c07b34e298 | ||
![]() |
ef5f181328 | ||
![]() |
a7ea2fcf92 | ||
![]() |
e81730715c | ||
![]() |
c09f2ad482 | ||
![]() |
84aef8b5b5 | ||
![]() |
8fac3e8221 | ||
![]() |
5874ed781d | ||
![]() |
d8f29bd7a7 | ||
![]() |
8120b6aaaa | ||
![]() |
13a0d1de70 | ||
![]() |
20e828be51 | ||
![]() |
ccd82fb8b8 | ||
![]() |
0711650ff8 | ||
![]() |
4194ac2226 | ||
![]() |
248e2d7ee0 | ||
![]() |
1daa654051 | ||
![]() |
d751434979 | ||
![]() |
8cc21920b7 | ||
![]() |
248212588d | ||
![]() |
13c0fdef08 | ||
![]() |
dfc27b2480 | ||
![]() |
b2d78d380b | ||
![]() |
faa6cb5c7d | ||
![]() |
452977abdf | ||
![]() |
93570b2f59 | ||
![]() |
073f5c2c8c | ||
![]() |
1b4313f847 | ||
![]() |
07cead7e99 | ||
![]() |
f128751aba | ||
![]() |
9516d9da17 | ||
![]() |
e9aafc2a56 | ||
![]() |
a91a6575e0 | ||
![]() |
5bd4093dfb | ||
![]() |
f9890e2016 | ||
![]() |
00529fe134 | ||
![]() |
5e9dce7d39 | ||
![]() |
734680b9f0 | ||
![]() |
d0b5345252 | ||
![]() |
c2b4a44a59 | ||
![]() |
38c79bbc11 | ||
![]() |
0d7028a36c | ||
![]() |
b63f687491 | ||
![]() |
952b636569 | ||
![]() |
e14ba48244 | ||
![]() |
720c8c31ec | ||
![]() |
4e8407ed8f | ||
![]() |
26c5f69161 | ||
![]() |
078ae15794 | ||
![]() |
16ae90dc9f | ||
![]() |
3de5afc68e | ||
![]() |
a7e8f5087e | ||
![]() |
2e6e75cd4e | ||
![]() |
9f3b35634a | ||
![]() |
c24dfc63dc | ||
![]() |
c029929850 | ||
![]() |
d9100913d5 | ||
![]() |
e03d970bc2 | ||
![]() |
fe4516ea23 | ||
![]() |
039b47b872 | ||
![]() |
0a57a8a7f3 | ||
![]() |
8c823f3a2d | ||
![]() |
33f3a4f455 | ||
![]() |
2ecf8044d7 | ||
![]() |
c9a1eb55b5 | ||
![]() |
76bb1fd61e | ||
![]() |
1275b26ba0 | ||
![]() |
a470a4af9b | ||
![]() |
487c9ebbd4 | ||
![]() |
746cab92f0 | ||
![]() |
33266a96ff | ||
![]() |
2816889d8d | ||
![]() |
58e177b3e4 | ||
![]() |
5cfd8bbb56 | ||
![]() |
e6fe6fd645 | ||
![]() |
63e167b38e | ||
![]() |
abe77c4783 | ||
![]() |
72af51fe9d | ||
![]() |
36b4134838 | ||
![]() |
cf6ee26fdb | ||
![]() |
858111e623 | ||
![]() |
367e625804 | ||
![]() |
ae4d9c7f80 | ||
![]() |
6c6ee41346 | ||
![]() |
9ef7688f9e | ||
![]() |
7d6e226c2b | ||
![]() |
17d1346a8a | ||
![]() |
59e0c10c42 | ||
![]() |
0d29e66092 | ||
![]() |
caa000f447 | ||
![]() |
267e114354 | ||
![]() |
b5375396d2 | ||
![]() |
e34f666b70 | ||
![]() |
19334b4f96 | ||
![]() |
1fa609e539 | ||
![]() |
d9ce25a721 | ||
![]() |
5b8fc25da6 | ||
![]() |
c70968dcf1 | ||
![]() |
77147510fb | ||
![]() |
7092577482 | ||
![]() |
3e70050056 | ||
![]() |
1f23c814e5 | ||
![]() |
145e0a0b7b | ||
![]() |
e68e787e7a | ||
![]() |
903308d285 | ||
![]() |
a4d8388b2e | ||
![]() |
3e83f9f956 | ||
![]() |
4063221313 | ||
![]() |
c3c8d80919 | ||
![]() |
3ae71c73c4 | ||
![]() |
b3db8c9549 | ||
![]() |
596eb4a0f9 | ||
![]() |
6b0381b903 | ||
![]() |
049c8f70cd | ||
![]() |
353bf69550 | ||
![]() |
cdb989ede3 | ||
![]() |
74079e4238 | ||
![]() |
c89746214c | ||
![]() |
1d97db3ef9 | ||
![]() |
b2a5ff5f9d | ||
![]() |
f47ef2b5ea | ||
![]() |
bd7ec3b692 | ||
![]() |
52895e7b6b | ||
![]() |
a6a82c6477 | ||
![]() |
af66ed94b2 | ||
![]() |
e43fdf5ef9 | ||
![]() |
3984fc075f | ||
![]() |
ee2a159374 | ||
![]() |
57c9b29ba3 | ||
![]() |
927ea72337 | ||
![]() |
123bdbd13b | ||
![]() |
0baa5a2f04 | ||
![]() |
7d98a70028 | ||
![]() |
73b72ab01c | ||
![]() |
e8cf71f41c | ||
![]() |
5f2d2a64d2 | ||
![]() |
27bf3901de | ||
![]() |
16d4fa03a5 | ||
![]() |
bef579ec26 | ||
![]() |
0cff10e02e | ||
![]() |
4c6f7238dd | ||
![]() |
583f1476d6 | ||
![]() |
b42bef32fd | ||
![]() |
8bb85ccf19 | ||
![]() |
3d88c2a5fa | ||
![]() |
e350acaf08 | ||
![]() |
172f70bef9 | ||
![]() |
9d25c0bf8a | ||
![]() |
75b377aab3 | ||
![]() |
3706f30b44 | ||
![]() |
a9697a61ad | ||
![]() |
e16a2d7cb6 | ||
![]() |
f106e2945b | ||
![]() |
1ad7deddb1 | ||
![]() |
7b81e98581 | ||
![]() |
0cae58ce8e | ||
![]() |
7231150115 | ||
![]() |
071986a4c9 | ||
![]() |
39e7d43f10 | ||
![]() |
aa1b17ae66 | ||
![]() |
92bae88355 | ||
![]() |
067eaf363e | ||
![]() |
00efc266d9 | ||
![]() |
0b014185e3 | ||
![]() |
3eee7378de | ||
![]() |
c31428f6bc | ||
![]() |
163e561cf9 | ||
![]() |
a32ded2829 | ||
![]() |
a5b7517fbd | ||
![]() |
176d57b35a | ||
![]() |
927a1d58e2 | ||
![]() |
bbd0df08d3 | ||
![]() |
9e57195e14 | ||
![]() |
05ab54c30d | ||
![]() |
e3e2028153 | ||
![]() |
883bcc735d | ||
![]() |
158727e2f2 | ||
![]() |
899f69d120 | ||
![]() |
b575046c05 | ||
![]() |
b5c60d2be2 | ||
![]() |
631dfee763 | ||
![]() |
d7f610113e | ||
![]() |
e0e4f6db2b | ||
![]() |
c27a26c0aa | ||
![]() |
3dcd2468a2 | ||
![]() |
ea43b28f74 | ||
![]() |
a3e2a085b6 | ||
![]() |
635d51b60d | ||
![]() |
95eb1c0d95 | ||
![]() |
8aca43a7e6 | ||
![]() |
f6afe59788 | ||
![]() |
8e13161f64 | ||
![]() |
97437b8af3 | ||
![]() |
9a938093e2 | ||
![]() |
3edcc9f9fd | ||
![]() |
55db408720 | ||
![]() |
caef874814 | ||
![]() |
1622639eca | ||
![]() |
4df89f4217 | ||
![]() |
079b98ed3f | ||
![]() |
a0526d2c9c | ||
![]() |
169b1cbd32 | ||
![]() |
8968081e77 | ||
![]() |
93ba7510e1 | ||
![]() |
579bb743bb | ||
![]() |
9e5e9ea612 | ||
![]() |
2241a13cba | ||
![]() |
9c1fb0cb92 | ||
![]() |
4904514257 | ||
![]() |
6d829c26a1 | ||
![]() |
c05467fb92 | ||
![]() |
d47f7f3348 | ||
![]() |
5931a84651 | ||
![]() |
5771783d11 | ||
![]() |
aae07a60bd | ||
![]() |
462d418ee0 | ||
![]() |
ce63c2e1db | ||
![]() |
52baf8cbe5 | ||
![]() |
1779b9ee1a | ||
![]() |
eae169236c | ||
![]() |
ce0efba0d2 | ||
![]() |
87c7ac3970 | ||
![]() |
0f8d196a52 | ||
![]() |
6dc7dab154 | ||
![]() |
dd4cb23005 | ||
![]() |
0589017f8c | ||
![]() |
55027a9b2b | ||
![]() |
0a984ca8c8 | ||
![]() |
929d13bfea | ||
![]() |
375e18bec8 | ||
![]() |
b9de74f183 | ||
![]() |
08ca69507f | ||
![]() |
65ca982342 | ||
![]() |
658281a92c | ||
![]() |
a959f61367 | ||
![]() |
8e61f744ec | ||
![]() |
73d3e52e29 | ||
![]() |
49a134845c | ||
![]() |
29807f3d39 | ||
![]() |
29b79b7725 | ||
![]() |
1cdb10a040 | ||
![]() |
5f7851df72 | ||
![]() |
3d9bc05d7a | ||
![]() |
c127428c59 | ||
![]() |
7966d8403a | ||
![]() |
80cc8a8e02 | ||
![]() |
ee4e205fef | ||
![]() |
ea443dc80c | ||
![]() |
283645513d | ||
![]() |
81b99382b8 | ||
![]() |
ab74465e6c | ||
![]() |
b3eadb557b | ||
![]() |
0abd2bcba6 | ||
![]() |
9cf76a918e | ||
![]() |
ae437b1510 | ||
![]() |
1096ec1c09 | ||
![]() |
235394d96c | ||
![]() |
d25e1d801c | ||
![]() |
2dca5ab966 | ||
![]() |
89ab57b1c1 | ||
![]() |
dc66e6a4bf | ||
![]() |
5c2f2fd882 | ||
![]() |
5c3ddefbf9 | ||
![]() |
a8d3f45ea1 | ||
![]() |
cc2c41ddc8 | ||
![]() |
b990f30a09 | ||
![]() |
5c711322d4 | ||
![]() |
b7d4a4f604 | ||
![]() |
cc8874b687 | ||
![]() |
2d0bc05488 | ||
![]() |
1429774487 | ||
![]() |
2060312dc1 | ||
![]() |
8b6728480f | ||
![]() |
cecafdee29 | ||
![]() |
05f2af25af | ||
![]() |
e3d826f6c4 | ||
![]() |
02430bed90 | ||
![]() |
3f7005ed9a | ||
![]() |
586ee75833 | ||
![]() |
1d903f11a8 | ||
![]() |
578159b95c | ||
![]() |
5c95587284 | ||
![]() |
f7e9227ad2 | ||
![]() |
c11a4d6867 | ||
![]() |
6c2b0448a4 | ||
![]() |
bd0eb8cccf | ||
![]() |
09bb043952 | ||
![]() |
9ca6cfd637 | ||
![]() |
3869a66fcc | ||
![]() |
d1c94f5120 | ||
![]() |
c55e9941ec | ||
![]() |
fa9a419d73 | ||
![]() |
ab4e0da6b4 | ||
![]() |
073572681e | ||
![]() |
b630f269c4 | ||
![]() |
40b1cd82b1 | ||
![]() |
abcbdef63b | ||
![]() |
dc8d1b0993 | ||
![]() |
56d53d8805 | ||
![]() |
7433fe049c | ||
![]() |
bb2be49d3b | ||
![]() |
cd1b578e84 | ||
![]() |
c3df9b4105 | ||
![]() |
243f3e21ec | ||
![]() |
375291380c | ||
![]() |
d221194454 | ||
![]() |
6d94a54387 | ||
![]() |
910bde88c7 | ||
![]() |
72916544ce | ||
![]() |
a01975dfce | ||
![]() |
10708801ae | ||
![]() |
ac096fb4e7 | ||
![]() |
620c1397ba | ||
![]() |
5b2f2f34f6 | ||
![]() |
ae3861a29d | ||
![]() |
93e2145254 | ||
![]() |
2b6290d275 | ||
![]() |
f81af7acb3 | ||
![]() |
f0170247a4 | ||
![]() |
3430874d11 | ||
![]() |
cb5e7532ab | ||
![]() |
5b928d679c | ||
![]() |
697b9694e5 | ||
![]() |
81c3e7e7f6 | ||
![]() |
0517bba8ca | ||
![]() |
83c7244fe6 | ||
![]() |
68fd129042 | ||
![]() |
b697e8a616 | ||
![]() |
2b281fbde9 | ||
![]() |
de8c4018c4 | ||
![]() |
9e8af96bbf | ||
![]() |
b0415a5289 | ||
![]() |
ff7344438b | ||
![]() |
f5f8e5d279 | ||
![]() |
b4ddc8f96c | ||
![]() |
e556c8ee15 | ||
![]() |
2f9a0b3376 | ||
![]() |
828f07b401 | ||
![]() |
36921b3426 | ||
![]() |
3988c6491c | ||
![]() |
2cf558ec05 | ||
![]() |
6fbadbdd94 | ||
![]() |
faa1d7effb | ||
![]() |
fe73a708d4 | ||
![]() |
a5ca262faa | ||
![]() |
8ebb1e29fa | ||
![]() |
1b44dc9522 | ||
![]() |
a66d468dc2 | ||
![]() |
ca8beafc2d | ||
![]() |
639c589a4a | ||
![]() |
cd66836218 | ||
![]() |
98662baa26 | ||
![]() |
004e5794e3 | ||
![]() |
f4f4f062cf | ||
![]() |
d8d9c7e171 | ||
![]() |
ceff82732e | ||
![]() |
d94b1708a9 | ||
![]() |
46e1f16012 | ||
![]() |
bbd014d409 | ||
![]() |
d553ee7c60 | ||
![]() |
2df6ab240d | ||
![]() |
8a2b9dfd6a | ||
![]() |
1f7892d7a9 | ||
![]() |
d11c537bea | ||
![]() |
2d4d237009 | ||
![]() |
daeee6b616 | ||
![]() |
eacb0b13b2 | ||
![]() |
dc5748059a | ||
![]() |
96d75f4bcb | ||
![]() |
19bfdf3f9f | ||
![]() |
4ea273b297 | ||
![]() |
72c9845174 | ||
![]() |
77597b329e | ||
![]() |
f62f00b4ad | ||
![]() |
1975973ff2 | ||
![]() |
00262b4a49 | ||
![]() |
de6cabe408 | ||
![]() |
d65552b59f | ||
![]() |
3755f48bce | ||
![]() |
8fe75d2015 | ||
![]() |
b0c0249ce6 | ||
![]() |
17685f3d86 | ||
![]() |
30f1c71569 | ||
![]() |
137afba1b6 | ||
![]() |
b27de5cac1 | ||
![]() |
8d43ae9805 | ||
![]() |
3cebb028f4 | ||
![]() |
28ab9d3515 | ||
![]() |
f7739309e8 | ||
![]() |
2db0d63c97 | ||
![]() |
437b86d1a7 | ||
![]() |
5ba1df52e0 | ||
![]() |
04ab753b26 | ||
![]() |
bc4a598a55 | ||
![]() |
651cdec9b5 | ||
![]() |
346f9fbacd | ||
![]() |
0f493ae808 | ||
![]() |
a07f143759 | ||
![]() |
0ec22c7a6e | ||
![]() |
73611004a0 | ||
![]() |
776ddddc83 | ||
![]() |
f60cce54ea | ||
![]() |
63087a4311 | ||
![]() |
5a193d50f6 | ||
![]() |
08a6e999b9 | ||
![]() |
e33cdca1ef | ||
![]() |
9ede7a3c42 | ||
![]() |
430d4e1ccd | ||
![]() |
de4d6037d3 | ||
![]() |
fc1fc6842b | ||
![]() |
0649b297f6 | ||
![]() |
9a470b9d41 | ||
![]() |
47d1ab356d | ||
![]() |
1ea5787486 | ||
![]() |
1d4695c109 | ||
![]() |
b673f9dd7f | ||
![]() |
a1dd03472f | ||
![]() |
497e545024 | ||
![]() |
6892fdb70b | ||
![]() |
aa1cc32d17 | ||
![]() |
b22398ae6c | ||
![]() |
e6eddaff73 | ||
![]() |
cd53518897 | ||
![]() |
8e9b1b7213 | ||
![]() |
7a88fae2e2 | ||
![]() |
f066da23c5 | ||
![]() |
34aa3d3e00 | ||
![]() |
715119fd45 | ||
![]() |
bde34fc4c4 | ||
![]() |
07b4aa89d4 | ||
![]() |
d60351114c | ||
![]() |
c932a70bef | ||
![]() |
4641d7ee8c | ||
![]() |
d4b3ee50f2 | ||
![]() |
5392daa3ff | ||
![]() |
a70e366fb4 | ||
![]() |
dff14268db | ||
![]() |
5517e157ad | ||
![]() |
bdf4ffc36b | ||
![]() |
71455c63c1 | ||
![]() |
b1ae2b1a41 | ||
![]() |
8a31732ce2 | ||
![]() |
e79aed7792 | ||
![]() |
973fc08f2d | ||
![]() |
00211e1fb2 | ||
![]() |
ce7286a72a | ||
![]() |
db335d5cec | ||
![]() |
ee5ce0c809 | ||
![]() |
b8efef7c7a | ||
![]() |
e2cbf40957 | ||
![]() |
d7d45fb8e2 | ||
![]() |
63afacc067 | ||
![]() |
3175199787 | ||
![]() |
1d0c3de65f | ||
![]() |
fe1646caa0 | ||
![]() |
72710f075b | ||
![]() |
c7c01aedc2 | ||
![]() |
c2e2e76fd8 | ||
![]() |
f30a87e4e2 | ||
![]() |
7a84cfd510 | ||
![]() |
7a5a773b07 | ||
![]() |
cf1488f6ce | ||
![]() |
b02badba0c | ||
![]() |
772d84ea5a | ||
![]() |
ddaa66f080 | ||
![]() |
8fd75833f0 | ||
![]() |
1967d60813 | ||
![]() |
f38f265cf7 | ||
![]() |
79f37ffee0 | ||
![]() |
d4b2a3c696 | ||
![]() |
39ec365821 | ||
![]() |
bc423c471d | ||
![]() |
a790f43566 | ||
![]() |
9fbdc950d2 | ||
![]() |
8319963cbb | ||
![]() |
4341219497 | ||
![]() |
835504270d | ||
![]() |
daed42d208 | ||
![]() |
850f51a156 | ||
![]() |
d37b195708 | ||
![]() |
54ceb85ebe | ||
![]() |
ef7a5bc753 | ||
![]() |
b7ef60eedd | ||
![]() |
70ede70ea8 | ||
![]() |
d1d942f3fd | ||
![]() |
53b3bda909 | ||
![]() |
ac5571a363 | ||
![]() |
c42f5eca87 | ||
![]() |
9cb6816b3c | ||
![]() |
feab633e60 | ||
![]() |
a50e430cd9 | ||
![]() |
46918ee907 | ||
![]() |
fe1889653e | ||
![]() |
9487b5367d | ||
![]() |
6b47df75a7 | ||
![]() |
bd9b2d54aa | ||
![]() |
506d1dc1f2 | ||
![]() |
90f9819cbd | ||
![]() |
9bbd03c14e | ||
![]() |
2852815e1a | ||
![]() |
41a100613f | ||
![]() |
63e489f134 | ||
![]() |
914d3c4a66 | ||
![]() |
2b47a1b06a | ||
![]() |
625419a7db | ||
![]() |
2710d9de5b | ||
![]() |
e51314b104 | ||
![]() |
4c128d837c | ||
![]() |
c392804f47 | ||
![]() |
cc7a25d9ce | ||
![]() |
36b2bea25f | ||
![]() |
913796ff0f | ||
![]() |
a1b9892c77 | ||
![]() |
03de4b29ea | ||
![]() |
35a706f745 | ||
![]() |
65cd9751d8 | ||
![]() |
ff9a1ebb1b | ||
![]() |
b5df000e9d | ||
![]() |
655522a3e5 | ||
![]() |
e4a4af34c5 | ||
![]() |
b047e562ca | ||
![]() |
1600233c48 | ||
![]() |
55c8bcd0e3 | ||
![]() |
2d0dadbd34 | ||
![]() |
49879bc9db | ||
![]() |
2c453c7691 | ||
![]() |
5166c22ce9 | ||
![]() |
225b9e1b15 | ||
![]() |
7a9d2c9a74 | ||
![]() |
3855e488cb | ||
![]() |
ce75747887 | ||
![]() |
c462766cb8 | ||
![]() |
bb905b70df | ||
![]() |
5c8b9f6b4c | ||
![]() |
c726639484 | ||
![]() |
100c7b8360 | ||
![]() |
5502df89bb | ||
![]() |
4491b66872 | ||
![]() |
9bc24728b4 | ||
![]() |
a3a00ea052 | ||
![]() |
1b1534add5 | ||
![]() |
a54c8d4f55 | ||
![]() |
0cddd15203 | ||
![]() |
5653d443d9 | ||
![]() |
a5a497c4ea | ||
![]() |
d60feb466c | ||
![]() |
a435167619 | ||
![]() |
99c823c763 | ||
![]() |
aebed13a40 | ||
![]() |
1347bdd545 | ||
![]() |
562754c0b9 | ||
![]() |
ec52e144e8 | ||
![]() |
3e383a9f57 | ||
![]() |
3a2444db0d | ||
![]() |
14d01ae358 | ||
![]() |
1f4b147ddd | ||
![]() |
12405f4059 | ||
![]() |
8d6965713c | ||
![]() |
fe2858bc75 | ||
![]() |
99dd6ae6aa | ||
![]() |
cb7ed4079f | ||
![]() |
89fbc055f4 | ||
![]() |
df12b838ad | ||
![]() |
055fa19c9b | ||
![]() |
d1b661506e | ||
![]() |
180ddcceaa | ||
![]() |
512fad207b | ||
![]() |
82d514d857 | ||
![]() |
037fac7cd4 | ||
![]() |
ebad85664d | ||
![]() |
4b626c39fe | ||
![]() |
81c539f150 | ||
![]() |
0e74d82777 | ||
![]() |
5ea34a3c07 | ||
![]() |
4f8c5c3c0a | ||
![]() |
37e45e0984 | ||
![]() |
5683ad6666 | ||
![]() |
92ca1e6e09 | ||
![]() |
6571fdbaa2 | ||
![]() |
9c3f138b8e | ||
![]() |
0ac2865b74 | ||
![]() |
98fc88dec6 | ||
![]() |
8cab790030 | ||
![]() |
954399b255 | ||
![]() |
66c95f901d | ||
![]() |
8265922d68 | ||
![]() |
2403184845 | ||
![]() |
15a53d299d | ||
![]() |
24a1a5d680 | ||
![]() |
c1cfff1502 | ||
![]() |
8b2599297b | ||
![]() |
1ed387dd54 | ||
![]() |
9c795895ba | ||
![]() |
3c193dca58 | ||
![]() |
ce2a8fbfab | ||
![]() |
4bbcf44351 | ||
![]() |
a9a43538be | ||
![]() |
905e4f16e2 | ||
![]() |
008489361d | ||
![]() |
dfa7fb53b2 | ||
![]() |
dc6604bcda | ||
![]() |
63194ff292 | ||
![]() |
53a727955f | ||
![]() |
a8fca89045 | ||
![]() |
1eff727722 | ||
![]() |
d9c6f7acb6 | ||
![]() |
faefe957b0 | ||
![]() |
2fb8467673 | ||
![]() |
401422deb3 | ||
![]() |
b52ed8e4c9 | ||
![]() |
41061d0289 | ||
![]() |
fed9197d23 | ||
![]() |
282d3dbf8c | ||
![]() |
b6c6dc7282 | ||
![]() |
45194061b3 | ||
![]() |
55480c8290 | ||
![]() |
63bcc04eff | ||
![]() |
fda5405e48 | ||
![]() |
819e52cab3 | ||
![]() |
ea917c82b6 | ||
![]() |
65d5303765 | ||
![]() |
08d37a4bef | ||
![]() |
da2b059802 | ||
![]() |
62d934dd8e | ||
![]() |
96086b7733 | ||
![]() |
182fc104bb | ||
![]() |
06a897fba0 | ||
![]() |
ff4b13245c | ||
![]() |
00a8906128 | ||
![]() |
8b73d2d39f | ||
![]() |
e976b3e43e | ||
![]() |
1585ca7c85 | ||
![]() |
f7697007e5 | ||
![]() |
ba151a8b83 | ||
![]() |
a5153f5375 | ||
![]() |
4899f01d6e | ||
![]() |
e6b3107997 | ||
![]() |
053440c4a8 | ||
![]() |
249e9c0b52 | ||
![]() |
099d5570f4 | ||
![]() |
6a84f433ea | ||
![]() |
12bf409e10 | ||
![]() |
a01f1e64fe | ||
![]() |
5f549a8fc6 | ||
![]() |
dd682013f9 | ||
![]() |
7f21975971 | ||
![]() |
bcd77031f3 | ||
![]() |
505a689268 | ||
![]() |
3c3848d4f8 | ||
![]() |
949150f9ff | ||
![]() |
7c72f17fad | ||
![]() |
b4cabe23e3 | ||
![]() |
40de014732 | ||
![]() |
f9b718f1eb | ||
![]() |
d051df9599 | ||
![]() |
4dc28989c8 | ||
![]() |
f133bbf499 | ||
![]() |
eb144af0b9 | ||
![]() |
0d020d3a54 | ||
![]() |
e1042e326d | ||
![]() |
f085e7d362 | ||
![]() |
b995f39206 | ||
![]() |
713bf58c44 | ||
![]() |
bbd8751f62 | ||
![]() |
a7af21958f | ||
![]() |
8fed3df681 | ||
![]() |
d8e83dabc6 | ||
![]() |
0be78b1204 | ||
![]() |
0a67ecbc3a | ||
![]() |
c57b4ee965 | ||
![]() |
d4db7b3fc1 | ||
![]() |
e9db964a70 | ||
![]() |
90c8a714fc | ||
![]() |
d958c0c68a | ||
![]() |
377d02ab1a | ||
![]() |
2c0ad89a07 | ||
![]() |
101a8adbc2 | ||
![]() |
5009fa461c | ||
![]() |
f48f6ae5df | ||
![]() |
be504212d0 | ||
![]() |
0f075137c9 | ||
![]() |
8714664e00 | ||
![]() |
bfaf938543 | ||
![]() |
b605bc086c | ||
![]() |
e394b16335 | ||
![]() |
0457423498 | ||
![]() |
91d30dbb83 | ||
![]() |
63642a4d3e | ||
![]() |
1b64900c14 | ||
![]() |
2660178658 | ||
![]() |
3a0271cd4d | ||
![]() |
76e2a2f032 | ||
![]() |
932de969f0 | ||
![]() |
9082ab6ff7 | ||
![]() |
2461173e26 | ||
![]() |
48c2f8b91b | ||
![]() |
6766b25414 | ||
![]() |
aacaf1b3fe | ||
![]() |
4cc154cbe1 | ||
![]() |
ca030dd5ed | ||
![]() |
f000409a90 | ||
![]() |
697f0659e2 | ||
![]() |
5169ef1f00 | ||
![]() |
10faa45182 | ||
![]() |
c6eaed76f3 | ||
![]() |
6ce338b2d0 | ||
![]() |
aa87f10b6a | ||
![]() |
9a980f9341 | ||
![]() |
544751895e | ||
![]() |
082b7fa0ec | ||
![]() |
4d23cf7746 | ||
![]() |
c687d832fa | ||
![]() |
4cd5afa3fb | ||
![]() |
39bb0f4c3e | ||
![]() |
aef673abd1 | ||
![]() |
c4f58cb6e2 | ||
![]() |
6e3170f5c7 | ||
![]() |
782b983354 | ||
![]() |
89dc5cec59 | ||
![]() |
1994dad972 | ||
![]() |
8168445b4a | ||
![]() |
838f8cb2e2 | ||
![]() |
2e3f240ac6 | ||
![]() |
c6de6e53b5 | ||
![]() |
edff3c35f2 | ||
![]() |
55c577e76e | ||
![]() |
93b75b6013 | ||
![]() |
452f258b17 | ||
![]() |
5f940c40ed | ||
![]() |
a19be79891 | ||
![]() |
60252bbda8 | ||
![]() |
6ac52f241d | ||
![]() |
6eeb22926a | ||
![]() |
329047836b | ||
![]() |
4524a69f99 | ||
![]() |
5a8b565199 | ||
![]() |
da5369e902 | ||
![]() |
a433e5b65f | ||
![]() |
ebb1389133 | ||
![]() |
b31fbc380f | ||
![]() |
a86912c8e7 | ||
![]() |
3e348f8c71 | ||
![]() |
bb91b16863 | ||
![]() |
8d068b339a | ||
![]() |
c54ac32732 | ||
![]() |
47c5008871 | ||
![]() |
0a412e2abb | ||
![]() |
27156d74da | ||
![]() |
50fd10ecd6 | ||
![]() |
cab104a60a | ||
![]() |
37f4469503 | ||
![]() |
60bcd70718 | ||
![]() |
ac9057bd23 | ||
![]() |
565a5abb55 | ||
![]() |
8b45256725 | ||
![]() |
b4a5f29cd1 | ||
![]() |
4d4fb9f435 | ||
![]() |
49c6aa2d74 | ||
![]() |
fb3290e870 | ||
![]() |
27fc0d5900 | ||
![]() |
85e16afaa0 | ||
![]() |
0ae4d1369d | ||
![]() |
d0f2a02277 | ||
![]() |
b1c72bacc4 | ||
![]() |
02ef0b0818 | ||
![]() |
e83e755fe1 | ||
![]() |
c73f7dd2f8 | ||
![]() |
436b08ab05 | ||
![]() |
ce15697ceb | ||
![]() |
95883b1e3c | ||
![]() |
0f96f3bd43 | ||
![]() |
df2a3837a9 | ||
![]() |
be5654dbd7 | ||
![]() |
0ab4b6d63d | ||
![]() |
c4a601b6f6 | ||
![]() |
eacd21b230 | ||
![]() |
3a611adc11 | ||
![]() |
381b491845 | ||
![]() |
6aca344bf7 | ||
![]() |
373ec96051 | ||
![]() |
0876cdd697 | ||
![]() |
fcc806615e | ||
![]() |
0486ccb0d4 | ||
![]() |
dc1312d58a | ||
![]() |
878a5dba60 | ||
![]() |
f8cc3180e8 | ||
![]() |
97f5490c13 | ||
![]() |
a4babc10c0 | ||
![]() |
512046e300 | ||
![]() |
6a9a0f1e73 | ||
![]() |
ac44ed0862 | ||
![]() |
b62142db82 | ||
![]() |
f01e40e671 | ||
![]() |
d8b9d353aa | ||
![]() |
98c65d8ddb | ||
![]() |
597859eb23 | ||
![]() |
34082c40d3 | ||
![]() |
d1d5f6821f | ||
![]() |
50714c3006 | ||
![]() |
18a40168d9 | ||
![]() |
2c783ff911 | ||
![]() |
3f32573638 | ||
![]() |
5ea323ce02 | ||
![]() |
b2f317ab7c | ||
![]() |
2948e4190b | ||
![]() |
f05b8c9542 | ||
![]() |
8b87893248 | ||
![]() |
a93e2cdc30 | ||
![]() |
f69b6c85f8 | ||
![]() |
20a4bb0936 | ||
![]() |
e8ab5aacc7 | ||
![]() |
0e2f062148 | ||
![]() |
d247d32221 | ||
![]() |
89e3292ced | ||
![]() |
c2535d7764 | ||
![]() |
200121477c | ||
![]() |
d23b63ca83 | ||
![]() |
9f91043131 | ||
![]() |
c668620c97 | ||
![]() |
0ee78769a1 | ||
![]() |
95f0e60343 | ||
![]() |
c35b13b3e2 | ||
![]() |
1f42491284 | ||
![]() |
ca8f8e0ee9 | ||
![]() |
9cb3cf250c | ||
![]() |
1cc5a67d82 | ||
![]() |
fa6823599a | ||
![]() |
f7822a448e | ||
![]() |
29edb8c8a1 | ||
![]() |
d2403d1b34 | ||
![]() |
c296634168 | ||
![]() |
ead22fa325 | ||
![]() |
3265cdc3e5 | ||
![]() |
8806981e64 | ||
![]() |
04c7a66eb4 | ||
![]() |
0a32314156 | ||
![]() |
6cdf97dfed | ||
![]() |
17c140c03d | ||
![]() |
dcdabe4551 | ||
![]() |
a0823b2fda | ||
![]() |
afcda3774c | ||
![]() |
f895e225d4 | ||
![]() |
d0a5f757ad | ||
![]() |
b43bc7f8e3 | ||
![]() |
c09e833627 | ||
![]() |
33475ef403 | ||
![]() |
73e14af1e3 | ||
![]() |
158cd83d17 | ||
![]() |
d1b1b77a4c | ||
![]() |
bc6ecd4101 | ||
![]() |
9c0d44ed9c | ||
![]() |
ed5e99cfee | ||
![]() |
6ef75b3645 | ||
![]() |
8143783cc5 | ||
![]() |
454efa5426 | ||
![]() |
51e3905cd4 | ||
![]() |
b61c8d5a9e | ||
![]() |
583451ee02 | ||
![]() |
8e779c9ad1 | ||
![]() |
b0c631709f | ||
![]() |
225d7dca7e | ||
![]() |
5c5f4ad29f | ||
![]() |
cb2cb2eab5 | ||
![]() |
64c289c014 | ||
![]() |
f2526ed5a8 | ||
![]() |
8fa29ffc19 | ||
![]() |
029758fdff | ||
![]() |
9db2197be1 | ||
![]() |
3e1e07e468 | ||
![]() |
c6b062a698 | ||
![]() |
ecb1b45280 | ||
![]() |
55d7be0b2f | ||
![]() |
4e37a762d2 | ||
![]() |
2ca580dc16 | ||
![]() |
83c7c4a68e | ||
![]() |
1ae8a72ba6 | ||
![]() |
7da11206da | ||
![]() |
4cd9e0f97e | ||
![]() |
5c559e4cc6 | ||
![]() |
371280ff76 | ||
![]() |
ebdf48899f | ||
![]() |
6962882e75 | ||
![]() |
e1fb8831de | ||
![]() |
e421d47b23 | ||
![]() |
9b65b000db | ||
![]() |
d5c29bf1b5 | ||
![]() |
4bb6a146e8 | ||
![]() |
f7ef7a18ac | ||
![]() |
0a87f13ceb | ||
![]() |
efb67b0fd4 | ||
![]() |
e3fff4356a | ||
![]() |
7d3b21582c | ||
![]() |
6a42714326 | ||
![]() |
288a61895c | ||
![]() |
4463804338 | ||
![]() |
57504acd00 | ||
![]() |
3f118a7239 | ||
![]() |
d265382ddf | ||
![]() |
08dffad160 | ||
![]() |
afebd9b724 | ||
![]() |
840bb29c54 | ||
![]() |
c79f09c119 | ||
![]() |
124340175a | ||
![]() |
07d1faf544 | ||
![]() |
92ee51b8db | ||
![]() |
92f4010e8e | ||
![]() |
667a52427e | ||
![]() |
e7063b2c69 | ||
![]() |
add08ead14 | ||
![]() |
5d7eba30a6 | ||
![]() |
7e2bec85ee | ||
![]() |
ca2e9d4afa | ||
![]() |
deafe93e6c | ||
![]() |
5257c5a0a8 | ||
![]() |
a6fcb70d12 | ||
![]() |
4674431829 | ||
![]() |
2b9c7fee20 | ||
![]() |
ee75909c80 | ||
![]() |
fbab80145e | ||
![]() |
95d8b12065 | ||
![]() |
9f8b7a180f | ||
![]() |
7f62f56661 | ||
![]() |
28ecf98fa6 | ||
![]() |
68f55e6639 | ||
![]() |
83e7af4503 | ||
![]() |
fbfaa8d25f | ||
![]() |
b46d199086 | ||
![]() |
64c6aac0cf | ||
![]() |
f3c64edf6e | ||
![]() |
61673cda70 | ||
![]() |
d71e6b18c0 | ||
![]() |
19fe47f71e | ||
![]() |
720bcbf8ac | ||
![]() |
bb3b7d68c1 | ||
![]() |
eb4b6d2a7f | ||
![]() |
abc3e8d59c | ||
![]() |
9f05f360f9 | ||
![]() |
9b2dc1b263 | ||
![]() |
50777d8d2c | ||
![]() |
63e85fe4be | ||
![]() |
e2cb927e1f | ||
![]() |
46165f4a4f | ||
![]() |
b1eaf5616a | ||
![]() |
22aa6d16a2 | ||
![]() |
dfaa5675b6 | ||
![]() |
0400fcb106 | ||
![]() |
40f54aea53 | ||
![]() |
d9a8e4d797 | ||
![]() |
ab4e1819c1 | ||
![]() |
91aa65e717 | ||
![]() |
ec684434dc | ||
![]() |
6a3a72eb06 | ||
![]() |
56544802e8 | ||
![]() |
3b5b9d7dab | ||
![]() |
e7082baaff | ||
![]() |
1d9ffffc49 | ||
![]() |
01c1fa0393 | ||
![]() |
c4d5886059 | ||
![]() |
2a63f2a3a6 | ||
![]() |
cc559dc9ce | ||
![]() |
4415888324 | ||
![]() |
dc6a0e3eec | ||
![]() |
3434ff4d45 | ||
![]() |
030e5ab894 | ||
![]() |
1caafac89a | ||
![]() |
26e2fc6d91 | ||
![]() |
740fa67a4e | ||
![]() |
d468423db3 | ||
![]() |
84664ebcdc | ||
![]() |
d46cd265f5 | ||
![]() |
a3bce7f7ca | ||
![]() |
30f66d012e | ||
![]() |
495b495f27 | ||
![]() |
e8f28ebc43 | ||
![]() |
01dcf550cf | ||
![]() |
987078fab5 | ||
![]() |
7da28f28e5 | ||
![]() |
3c9af84ea2 | ||
![]() |
286fd19ba2 | ||
![]() |
39dce71c28 | ||
![]() |
b3b1d6d706 | ||
![]() |
c04040468e | ||
![]() |
aee7777478 | ||
![]() |
09c1e21560 | ||
![]() |
60e9f56b0f | ||
![]() |
302e4ab664 | ||
![]() |
484c3aa320 | ||
![]() |
0bc769b971 | ||
![]() |
5b98d41637 | ||
![]() |
e14b7851b1 | ||
![]() |
13d2334a45 | ||
![]() |
9864e04aae | ||
![]() |
4d6bbbf004 | ||
![]() |
44305b4ccd | ||
![]() |
7f86b13d93 | ||
![]() |
d65b8d7d18 | ||
![]() |
6968dd266a | ||
![]() |
8754cbb38f | ||
![]() |
c7b4705538 | ||
![]() |
065faf31b6 | ||
![]() |
da4b27f606 | ||
![]() |
e1cc84ab5f | ||
![]() |
533aede80f | ||
![]() |
e84d5311f9 | ||
![]() |
476b3f804b | ||
![]() |
9445e8e8a0 | ||
![]() |
e539753279 | ||
![]() |
f5f81be6fe | ||
![]() |
3b8a55f0d3 | ||
![]() |
b1dd6cbb6e | ||
![]() |
431724f637 | ||
![]() |
6e5851aea8 | ||
![]() |
30e5e58178 | ||
![]() |
40207b515d | ||
![]() |
95a6aaac76 | ||
![]() |
da43f47487 | ||
![]() |
ae5360fb27 | ||
![]() |
47d2ae5c5e | ||
![]() |
e1101dd6f1 | ||
![]() |
d460351da2 | ||
![]() |
fd076f5a58 | ||
![]() |
f7d73fc21b | ||
![]() |
5680b7c477 | ||
![]() |
9f9b53c067 | ||
![]() |
18d986a57d | ||
![]() |
61632b3d9d | ||
![]() |
f1688fb8b1 | ||
![]() |
f0e85b31aa | ||
![]() |
316871714a | ||
![]() |
12c72842ff | ||
![]() |
4230e11c4d | ||
![]() |
c76ff8d367 | ||
![]() |
831e9985e2 | ||
![]() |
9912ee8199 | ||
![]() |
91bd0be39e | ||
![]() |
55d17b556a | ||
![]() |
5495be749b | ||
![]() |
54f71c623a | ||
![]() |
e3a891688b | ||
![]() |
09d36a5dbc | ||
![]() |
ff493406cf | ||
![]() |
fbcee61e04 | ||
![]() |
e62e34fd5c | ||
![]() |
3b57135a6e | ||
![]() |
69934dee52 | ||
![]() |
51f2efd48c | ||
![]() |
4de2cfdcc6 | ||
![]() |
7845b7678d | ||
![]() |
6f9543b9cf | ||
![]() |
5b541cc9fb | ||
![]() |
ea54520e0b | ||
![]() |
00b6bd517a | ||
![]() |
9fb5aa4b46 | ||
![]() |
f089cd027e | ||
![]() |
5151c6cb54 | ||
![]() |
9407ac8c24 | ||
![]() |
6a91a3a947 | ||
![]() |
ac0bcea371 | ||
![]() |
302a6ff4e8 | ||
![]() |
0d89667428 | ||
![]() |
dbb6848a9b | ||
![]() |
a843e808d1 | ||
![]() |
67af05e504 | ||
![]() |
c995c6fda5 | ||
![]() |
3b5cf0e37c | ||
![]() |
c7a9847e66 | ||
![]() |
3624f1b9a2 | ||
![]() |
aecc908152 | ||
![]() |
9f9c6eff00 | ||
![]() |
99400fa570 | ||
![]() |
17d00837bd | ||
![]() |
0882d9d66b | ||
![]() |
5bd0c701c7 | ||
![]() |
0df81409bf | ||
![]() |
a75deb6ba2 | ||
![]() |
4b8474b0ac | ||
![]() |
7478e96a15 | ||
![]() |
c1d9a253b0 | ||
![]() |
eb7d9f76e5 | ||
![]() |
ec45d4a729 | ||
![]() |
07544cd198 | ||
![]() |
3f3d1bfccf | ||
![]() |
d3cb887ff0 | ||
![]() |
88c68315f6 | ||
![]() |
2d62fa401d | ||
![]() |
3ff85c2ab7 | ||
![]() |
13f5d3b5ac | ||
![]() |
9eb55e1be5 | ||
![]() |
6adbfade2b | ||
![]() |
7568616f8e | ||
![]() |
c93be13dfe | ||
![]() |
e9dc96944b | ||
![]() |
06e536eb45 | ||
![]() |
72e90b4d57 | ||
![]() |
83d43f845f | ||
![]() |
5ed5a81708 | ||
![]() |
ce003d2683 | ||
![]() |
75248d7a12 | ||
![]() |
06eff256f3 | ||
![]() |
a476f332f7 | ||
![]() |
6d49148c32 | ||
![]() |
85acc53d40 | ||
![]() |
f319e3e75a | ||
![]() |
3abc660eb3 | ||
![]() |
4c13dda1f9 | ||
![]() |
294c35b2fb | ||
![]() |
badaff8ebc | ||
![]() |
50a2771d87 | ||
![]() |
7045f9711c | ||
![]() |
aaf5d7b89c | ||
![]() |
487952f52e | ||
![]() |
34e31807fc | ||
![]() |
e6df041613 | ||
![]() |
21184f8755 | ||
![]() |
2bac66b5fe | ||
![]() |
b5f069d080 | ||
![]() |
bc393e6bcd | ||
![]() |
af411a61ae | ||
![]() |
2805850711 | ||
![]() |
0f0a367174 | ||
![]() |
7009dc574f | ||
![]() |
6941917c75 | ||
![]() |
9560cf59be | ||
![]() |
0a2374892c | ||
![]() |
5d5c2ae2ed | ||
![]() |
2cceb048e3 | ||
![]() |
ed9c85b25a | ||
![]() |
bb8bcf3c33 | ||
![]() |
b5684ee7df | ||
![]() |
2c27f784f7 | ||
![]() |
46c1155c64 | ||
![]() |
cf377c2591 | ||
![]() |
471ce4a24b | ||
![]() |
b6841158df | ||
![]() |
3372bacc62 | ||
![]() |
6da9096176 | ||
![]() |
244009a1cd | ||
![]() |
0f22833ad5 | ||
![]() |
b589ee6c26 | ||
![]() |
9f0efdd544 | ||
![]() |
07c7398a96 | ||
![]() |
a117e459b0 | ||
![]() |
7568af408a | ||
![]() |
d1801e1dbc | ||
![]() |
38d193899c | ||
![]() |
f95d51b307 | ||
![]() |
1bf55c2139 | ||
![]() |
9b09028440 | ||
![]() |
0cc890a1d1 | ||
![]() |
fe138f6d61 | ||
![]() |
4e1638f86e | ||
![]() |
daa4fd5103 | ||
![]() |
a3d8848825 | ||
![]() |
61d102dc75 | ||
![]() |
c0519d8313 | ||
![]() |
48a2d2d24b | ||
![]() |
fb0d626cb2 | ||
![]() |
766326ad8c | ||
![]() |
2a903f66dd | ||
![]() |
8712310ad9 | ||
![]() |
e8c3ab87c4 | ||
![]() |
90c20f124b | ||
![]() |
cd225eb5fe | ||
![]() |
14e852237f | ||
![]() |
d36ac7a5de | ||
![]() |
55a138e8da | ||
![]() |
c5e6bb58bc | ||
![]() |
2642d6f5f0 | ||
![]() |
bcb3cb9125 | ||
![]() |
f7203d4ac9 | ||
![]() |
6be23a0a6f | ||
![]() |
089a9f1a9c | ||
![]() |
2977de1df2 | ||
![]() |
eab3f8b3ff | ||
![]() |
d686a2c9dc | ||
![]() |
d34e5f78a9 | ||
![]() |
edc9d47da7 | ||
![]() |
0c5608506e | ||
![]() |
bda6139f42 | ||
![]() |
1ae8ca1e21 | ||
![]() |
342377e69a | ||
![]() |
0447e4e664 | ||
![]() |
fd3d61c6a0 | ||
![]() |
69bf1c5d81 | ||
![]() |
fbf6351b99 | ||
![]() |
caa1de8aff | ||
![]() |
fac13fb8cb | ||
![]() |
a78762756a | ||
![]() |
1f24c18614 | ||
![]() |
153790d80a | ||
![]() |
e98f27cb66 | ||
![]() |
c17d80948c | ||
![]() |
c486368b9b | ||
![]() |
42bb96af23 | ||
![]() |
e082976914 | ||
![]() |
156a2eb4ff | ||
![]() |
e94981e6f7 | ||
![]() |
be92921034 | ||
![]() |
94403a9c3c | ||
![]() |
b5ea61a079 | ||
![]() |
af9e2420a6 | ||
![]() |
14b3cf7ccd | ||
![]() |
9c58a07a72 | ||
![]() |
609855f774 | ||
![]() |
37409e7d90 | ||
![]() |
cc83991d8d | ||
![]() |
bf5e94fc1a | ||
![]() |
52420d4bf1 | ||
![]() |
7f7bf8474e | ||
![]() |
e1145f16f2 | ||
![]() |
b430a23df1 | ||
![]() |
fa7173b3d5 | ||
![]() |
b2d78786c2 | ||
![]() |
489420e855 | ||
![]() |
5bc0d2c31b | ||
![]() |
e9fda96aa1 | ||
![]() |
64b0ccd574 | ||
![]() |
d3aadc71b1 | ||
![]() |
c21ccef7bc | ||
![]() |
2152375227 | ||
![]() |
10d57afaac | ||
![]() |
e224f8ca28 | ||
![]() |
1f975c0a3a | ||
![]() |
ce075395a1 | ||
![]() |
167653ac60 | ||
![]() |
ee0f94c232 | ||
![]() |
0ed3354cee | ||
![]() |
b8f726153f | ||
![]() |
afc362d2b6 | ||
![]() |
776d8a4406 | ||
![]() |
7718581882 | ||
![]() |
ba245c49da | ||
![]() |
cf60033424 | ||
![]() |
0e39071b5e | ||
![]() |
b6028cef5b | ||
![]() |
62906fb84a | ||
![]() |
4797cd9184 | ||
![]() |
366c55c8f4 | ||
![]() |
7e93456805 | ||
![]() |
de1a92539a | ||
![]() |
84dd1a688e | ||
![]() |
36c4063db6 | ||
![]() |
9c9a432ea0 | ||
![]() |
1c53b22239 | ||
![]() |
5dbab85505 | ||
![]() |
2873f723e8 | ||
![]() |
6b7043fb9d | ||
![]() |
9d5612d104 | ||
![]() |
e58088d290 | ||
![]() |
77aa12dd81 | ||
![]() |
8c3be2c9df | ||
![]() |
266c3d03fc | ||
![]() |
42ff60ce85 | ||
![]() |
e08e724573 | ||
![]() |
b155f23d27 | ||
![]() |
a2d3e2c7e0 | ||
![]() |
ed18466c3b | ||
![]() |
845767e2f8 | ||
![]() |
a0548fdbf8 | ||
![]() |
b837912e75 | ||
![]() |
0cd9fb32a8 | ||
![]() |
fd62411b35 | ||
![]() |
134850aa04 | ||
![]() |
0795135f2f | ||
![]() |
85eb1dc436 | ||
![]() |
2f2b8784f9 | ||
![]() |
181658e5a4 | ||
![]() |
7dbb2b206c | ||
![]() |
ef90493c27 | ||
![]() |
d949894511 | ||
![]() |
570dded8d6 | ||
![]() |
235ead9222 | ||
![]() |
3ee6788753 | ||
![]() |
e3dfab5078 | ||
![]() |
5f232a059d | ||
![]() |
1b708d261d | ||
![]() |
3341742f66 | ||
![]() |
b731c79339 | ||
![]() |
29b12c2f84 | ||
![]() |
ba53f6611c | ||
![]() |
6eeed50418 | ||
![]() |
8caf9f87a1 | ||
![]() |
2e6089088b | ||
![]() |
40eaa166ae | ||
![]() |
41e2e5f951 | ||
![]() |
ac3938d529 | ||
![]() |
515ec4d66d | ||
![]() |
5adc27ea2b | ||
![]() |
ab089a5f93 | ||
![]() |
9d8fcbbffe | ||
![]() |
590722d929 | ||
![]() |
a0ee1b1653 | ||
![]() |
b965f88eb2 | ||
![]() |
a228e702da | ||
![]() |
105981b2eb | ||
![]() |
055365a449 | ||
![]() |
f8a7aac40d | ||
![]() |
6712ea5e6f | ||
![]() |
382e69273e | ||
![]() |
9b71828b97 | ||
![]() |
00eddcb237 | ||
![]() |
49cc643dcc | ||
![]() |
42ec6f0810 | ||
![]() |
9f47a274a8 | ||
![]() |
1f8c0a9e5e | ||
![]() |
cef9ccd937 | ||
![]() |
9d773d6e8a | ||
![]() |
3d93ecd6ec | ||
![]() |
36e38e50e9 | ||
![]() |
1a8be2bbf5 | ||
![]() |
92b1fa5743 | ||
![]() |
335e5c05db | ||
![]() |
bfead79c07 | ||
![]() |
bd8014bcbd | ||
![]() |
948d57d3d1 | ||
![]() |
31b830d6d0 | ||
![]() |
2038df976c | ||
![]() |
46cc215120 | ||
![]() |
3afce82aa7 | ||
![]() |
88e5be237e | ||
![]() |
7c4b9d8843 | ||
![]() |
b83e1716fe | ||
![]() |
c3e41e2427 | ||
![]() |
3f67b3b73c | ||
![]() |
78c9e4e1ad | ||
![]() |
69c090b5a1 | ||
![]() |
2c8222fd55 | ||
![]() |
d071891b2a | ||
![]() |
986acc5fc5 | ||
![]() |
e4295fb3fa | ||
![]() |
cfad3fb5de | ||
![]() |
b18236a27e | ||
![]() |
f6bbc69cf9 | ||
![]() |
707e4f7167 | ||
![]() |
11d06dc86d | ||
![]() |
8f46432391 | ||
![]() |
99cdaec40e | ||
![]() |
b32935a1b0 | ||
![]() |
ed9a3517c6 | ||
![]() |
e0a39efa2b | ||
![]() |
3ad0e313ca | ||
![]() |
bca547ce44 | ||
![]() |
6bc697f926 | ||
![]() |
bff5371e41 | ||
![]() |
694013c9df | ||
![]() |
a76398efd0 | ||
![]() |
99bcd8d043 | ||
![]() |
1602ecbaf9 | ||
![]() |
7e17bdf369 | ||
![]() |
d316bbad44 | ||
![]() |
72151c8c0c | ||
![]() |
e2e0a9bfa2 | ||
![]() |
8d53b07167 | ||
![]() |
1df852171d | ||
![]() |
399e2626fb | ||
![]() |
752a76eb44 | ||
![]() |
8feee05eec | ||
![]() |
e9a4caaf0b | ||
![]() |
8de367e03f | ||
![]() |
dad88b83fb | ||
![]() |
846f7f2f05 | ||
![]() |
41e18ae694 | ||
![]() |
deeac118a1 | ||
![]() |
594d77e713 | ||
![]() |
2ea404659b | ||
![]() |
e2ec95e6ff | ||
![]() |
db87df743d | ||
![]() |
23f9ffdab7 | ||
![]() |
28063c35c2 | ||
![]() |
21a39b06e7 | ||
![]() |
8fb29ae6c2 | ||
![]() |
21895caa3a | ||
![]() |
f17b92512c | ||
![]() |
014682664d | ||
![]() |
5bf1df9f14 | ||
![]() |
dea1e0dcb9 | ||
![]() |
eb5fb42da9 | ||
![]() |
c46a0f7b2e | ||
![]() |
835476870b | ||
![]() |
718acb5059 | ||
![]() |
1aa763e86c | ||
![]() |
0395dc6e9e | ||
![]() |
96de70b71e | ||
![]() |
f44883e79f | ||
![]() |
c56fb8cec2 | ||
![]() |
3625a38a23 | ||
![]() |
1393d3ad7f | ||
![]() |
b674cfec24 | ||
![]() |
f0f0c43b72 | ||
![]() |
33caad4690 | ||
![]() |
0afc8005d0 | ||
![]() |
f04d2e76fa | ||
![]() |
8e1d7f162d | ||
![]() |
ee65e89230 | ||
![]() |
a8e26238a8 | ||
![]() |
a3dc95bef1 | ||
![]() |
a29df9a2dd | ||
![]() |
cc17d268fc | ||
![]() |
22a9a06b87 | ||
![]() |
55d2637214 | ||
![]() |
d063d39dbc | ||
![]() |
87e29dbd84 | ||
![]() |
2227a7a6bd | ||
![]() |
867f633d16 | ||
![]() |
b9de3c202a | ||
![]() |
56364c4a2c | ||
![]() |
b1fd2c007d | ||
![]() |
741a872c39 | ||
![]() |
e1e2add616 | ||
![]() |
0c664e346a | ||
![]() |
7ddb856ccd | ||
![]() |
17c0b981d1 | ||
![]() |
7f0a9904ff | ||
![]() |
2b4190d85d | ||
![]() |
57e89babf1 | ||
![]() |
209dc5ace9 | ||
![]() |
ab7f3c7399 | ||
![]() |
1e7e8d4121 | ||
![]() |
04b75ef05f | ||
![]() |
de19421de1 | ||
![]() |
61f64a7349 | ||
![]() |
6fb16bad85 | ||
![]() |
694813ac90 | ||
![]() |
6f3fd50ed8 | ||
![]() |
c1e1c191d0 | ||
![]() |
f4c8fdaf07 | ||
![]() |
457ebe3aa2 | ||
![]() |
8da8ce0a0a | ||
![]() |
cc869b98a3 | ||
![]() |
f9e7873e54 | ||
![]() |
c4cba8aa37 | ||
![]() |
22e4ef4034 | ||
![]() |
708cdc4c62 | ||
![]() |
94931df60b | ||
![]() |
b3605fe6d4 | ||
![]() |
11e0ed7c4f | ||
![]() |
34e89448b1 | ||
![]() |
9a6e936996 | ||
![]() |
5ed58b8609 | ||
![]() |
0d7d610127 | ||
![]() |
9f789167da | ||
![]() |
92a42235a1 | ||
![]() |
3f52938f08 | ||
![]() |
a08cd4ce6a | ||
![]() |
46b12ed819 | ||
![]() |
e7ef193da6 | ||
![]() |
2ebe5aa878 | ||
![]() |
f58f6639f8 | ||
![]() |
f995ba115c | ||
![]() |
755dff343d | ||
![]() |
c8c7d23971 | ||
![]() |
9309159c38 | ||
![]() |
8e45296826 | ||
![]() |
559bcfc6a5 | ||
![]() |
23c2f748d6 | ||
![]() |
3e409b9cc1 | ||
![]() |
c0453065e4 | ||
![]() |
88a6e5981f | ||
![]() |
8970a663ec | ||
![]() |
334437137e | ||
![]() |
949c01b37f | ||
![]() |
17146c2c13 | ||
![]() |
dcd35b038e | ||
![]() |
550364906d | ||
![]() |
fa8483bbb6 | ||
![]() |
b976e40439 | ||
![]() |
6fcae39fe2 | ||
![]() |
ec1de9824a | ||
![]() |
8f83c210ad | ||
![]() |
d68009ff7e | ||
![]() |
bac2045111 | ||
![]() |
bbf3c37978 | ||
![]() |
901c63d1f2 | ||
![]() |
13306b5c1b | ||
![]() |
b883ad1657 | ||
![]() |
6029e18980 | ||
![]() |
a81b791ee3 | ||
![]() |
7e5aaabadf | ||
![]() |
e01e0d5aed | ||
![]() |
db07b81c3c | ||
![]() |
d660e4ac9d | ||
![]() |
d90588ce6b | ||
![]() |
7e78197b37 | ||
![]() |
06af26f1f2 | ||
![]() |
d0e07276dd | ||
![]() |
59c19614ea | ||
![]() |
0f04dd6dae | ||
![]() |
b365973ac6 | ||
![]() |
19fb8cfbfe | ||
![]() |
d8e6a5cb33 | ||
![]() |
f4c6a49339 | ||
![]() |
23ee22566d | ||
![]() |
ea70a1f334 | ||
![]() |
68a1407314 | ||
![]() |
881efb9be8 | ||
![]() |
7844547e4f | ||
![]() |
054279d553 | ||
![]() |
8c9015b57b | ||
![]() |
a0cb96abff | ||
![]() |
b2bbdc656a | ||
![]() |
a0151f2a68 | ||
![]() |
fd5f4d9840 | ||
![]() |
98d7e6bcc6 | ||
![]() |
e92ca5e572 | ||
![]() |
27ca9ed8b8 | ||
![]() |
c2b1d45fc4 | ||
![]() |
03939555ac | ||
![]() |
5a2cd93d13 | ||
![]() |
ef69625cd2 | ||
![]() |
ae88b4c697 | ||
![]() |
693756bdd6 | ||
![]() |
c05633979c | ||
![]() |
7d80d04f34 | ||
![]() |
3ff2da3b20 | ||
![]() |
eb15bc97a7 | ||
![]() |
c6cd2dd854 | ||
![]() |
aae8865bdd | ||
![]() |
c15cead9e2 | ||
![]() |
0ccd30b12e | ||
![]() |
d2a59ecc62 | ||
![]() |
7a67d192c3 | ||
![]() |
d32ad36f3d | ||
![]() |
f587d79cd8 | ||
![]() |
9e290ce91a | ||
![]() |
0c40a45075 | ||
![]() |
17c5e73994 | ||
![]() |
890d1cb50b | ||
![]() |
4c89d1a6e5 | ||
![]() |
3f51114129 | ||
![]() |
29136d633a | ||
![]() |
20bff1389e | ||
![]() |
106e538d08 | ||
![]() |
dc7ae3917e | ||
![]() |
c0fb96a911 | ||
![]() |
a1e02f7704 | ||
![]() |
436c75ca6c | ||
![]() |
7d75950624 | ||
![]() |
5f051a9766 | ||
![]() |
5716cf8cb2 | ||
![]() |
7bb5cacb0d | ||
![]() |
9801cf50e3 | ||
![]() |
b5558a8b78 | ||
![]() |
a7c31e6bcc | ||
![]() |
6e76610f30 | ||
![]() |
6da2b399e8 | ||
![]() |
79c962fc88 | ||
![]() |
28fb864ed0 | ||
![]() |
d23227d427 | ||
![]() |
eb6d26b6a4 | ||
![]() |
a8a28294d3 | ||
![]() |
7db1ba40eb | ||
![]() |
d8bd8d87ec | ||
![]() |
d29e0aa1a7 | ||
![]() |
644ad110c0 | ||
![]() |
6791de5fc0 | ||
![]() |
1bb96ef405 | ||
![]() |
7dc4ccf144 | ||
![]() |
2b39438eba | ||
![]() |
8952e2b0cd | ||
![]() |
4806ac62ee | ||
![]() |
eaa1179572 | ||
![]() |
77d3a1ef45 | ||
![]() |
6e289b44c7 | ||
![]() |
8039055a87 | ||
![]() |
6c0f5bef21 | ||
![]() |
7dd7ea1a32 | ||
![]() |
3bce9a8ead | ||
![]() |
da82e3f5d1 | ||
![]() |
0df5d7a934 | ||
![]() |
27f38f329f | ||
![]() |
c4707978c4 | ||
![]() |
2ad0792581 | ||
![]() |
8741856234 | ||
![]() |
e37a86efc2 | ||
![]() |
baee238a2c | ||
![]() |
e8437052d8 | ||
![]() |
cf13f5ca56 | ||
![]() |
52f82ed228 | ||
![]() |
84ec320df4 | ||
![]() |
0033843bc2 | ||
![]() |
3ca461413e | ||
![]() |
e6d9d8e26d | ||
![]() |
763995d4c9 | ||
![]() |
8a992d4c47 | ||
![]() |
da052df106 | ||
![]() |
60d4c8a55d | ||
![]() |
4292ca94ff | ||
![]() |
570738190d | ||
![]() |
86dafdd92b | ||
![]() |
dab53450c1 | ||
![]() |
773aa1eff0 | ||
![]() |
14de2f289f | ||
![]() |
eeeeeef3a7 | ||
![]() |
ea1be11a80 | ||
![]() |
309fd3fb7d | ||
![]() |
6a24dcec73 | ||
![]() |
3e2dba2fd5 | ||
![]() |
527c38adf9 | ||
![]() |
f62a7919a5 | ||
![]() |
844f80a5f1 | ||
![]() |
94e23142a5 | ||
![]() |
9339fc80b4 | ||
![]() |
d092e39c56 | ||
![]() |
160a33e8c8 | ||
![]() |
429ee7eb93 | ||
![]() |
c891f2f1ed | ||
![]() |
3108c903dd | ||
![]() |
0cdfa6e377 | ||
![]() |
52a21e4a24 | ||
![]() |
8e152df46d | ||
![]() |
a68c8ceebe | ||
![]() |
1ce44b31e2 | ||
![]() |
8f52f918db | ||
![]() |
55f5f76275 | ||
![]() |
f122d73754 | ||
![]() |
8227d85feb | ||
![]() |
46e2f4e579 | ||
![]() |
0c65f73180 | ||
![]() |
0fb7eab2f9 | ||
![]() |
2b2de8811e | ||
![]() |
5e87463125 | ||
![]() |
424d3fdcd7 | ||
![]() |
6452c7e08c | ||
![]() |
e21257b786 | ||
![]() |
0f70aeb910 | ||
![]() |
cedfbf5f67 | ||
![]() |
31fab60701 | ||
![]() |
afef8d8d0b | ||
![]() |
ac2543d0a1 | ||
![]() |
81658de08f | ||
![]() |
2ad0d47f61 | ||
![]() |
b9d6d55aa4 | ||
![]() |
719d8651b3 | ||
![]() |
f3988c37b6 | ||
![]() |
912f09c83e | ||
![]() |
27330951aa | ||
![]() |
84089453e7 | ||
![]() |
59f76ef304 | ||
![]() |
4061145933 | ||
![]() |
e900a69a26 | ||
![]() |
9cdec5de50 | ||
![]() |
ceabfd1a8b | ||
![]() |
bc283bce4e | ||
![]() |
544cae4fb4 | ||
![]() |
38a0395d45 | ||
![]() |
a5b7666188 | ||
![]() |
58a626dedb | ||
![]() |
7e311e5567 | ||
![]() |
596005c69e | ||
![]() |
14ee7d53d7 | ||
![]() |
2f575c13f1 | ||
![]() |
82738e23ce | ||
![]() |
93e99d096a | ||
![]() |
784b9cf207 | ||
![]() |
7b56244c8b | ||
![]() |
44192d6e49 | ||
![]() |
4ded3adadb | ||
![]() |
3798d5228c | ||
![]() |
0491c4af9c | ||
![]() |
69799613aa | ||
![]() |
c0cbec700c | ||
![]() |
e9c9dfcd8c | ||
![]() |
c9cbb1e6f1 | ||
![]() |
3ea8841e3a | ||
![]() |
8b26e5b106 | ||
![]() |
495fa170a9 | ||
![]() |
406d02fd28 | ||
![]() |
3ad8883999 | ||
![]() |
dcd7055a9d | ||
![]() |
a8e326ceea | ||
![]() |
b125ff702a | ||
![]() |
6e546703a9 | ||
![]() |
71f1bbdcc1 | ||
![]() |
bdb86a7fde | ||
![]() |
8ac8258400 | ||
![]() |
0338ff8d51 | ||
![]() |
d694e61006 | ||
![]() |
b6be586766 | ||
![]() |
9915287a5a | ||
![]() |
cb19f792da | ||
![]() |
f449aee901 | ||
![]() |
b665122c3c | ||
![]() |
f4dbd5c9bd | ||
![]() |
cb6d7e6dd7 | ||
![]() |
4d4a86f889 | ||
![]() |
e3829303f9 | ||
![]() |
86d4cf3dfc | ||
![]() |
ed4196f732 | ||
![]() |
af70fdd7a6 | ||
![]() |
0ee6c1e47e | ||
![]() |
0886c6b216 | ||
![]() |
754fe3adfb | ||
![]() |
b5058f99ce | ||
![]() |
f7be693470 | ||
![]() |
b772afeeab | ||
![]() |
f0c7cb9f94 | ||
![]() |
1561c210fb | ||
![]() |
727fb27ad0 | ||
![]() |
ceb1d70551 | ||
![]() |
720bff02aa | ||
![]() |
f82dd3e152 | ||
![]() |
a3dff2c608 | ||
![]() |
28f87dcb2b | ||
![]() |
4daae95979 | ||
![]() |
577bfab366 | ||
![]() |
655993d8f2 | ||
![]() |
3e079a6858 | ||
![]() |
e5afffdced | ||
![]() |
a43c434376 | ||
![]() |
225647cf65 | ||
![]() |
fdab92c92b | ||
![]() |
72adb7a53b | ||
![]() |
f84907e2c9 | ||
![]() |
ab3b8d0a14 | ||
![]() |
5e7b635006 | ||
![]() |
58181ee37f | ||
![]() |
4db4b3af86 | ||
![]() |
504f45efa6 | ||
![]() |
114a7ccdd4 | ||
![]() |
1a9b3c9d7c | ||
![]() |
137fabee0e | ||
![]() |
2d41022ee4 | ||
![]() |
2ce0caa943 | ||
![]() |
2839154b68 | ||
![]() |
e25c5544ba | ||
![]() |
7c70033f19 | ||
![]() |
59f90fcdfe | ||
![]() |
e05def491f | ||
![]() |
19738c0c1b | ||
![]() |
0790a43aa2 | ||
![]() |
fd4a4d979a | ||
![]() |
6011dec272 | ||
![]() |
98ae78eb06 | ||
![]() |
b861f21bca | ||
![]() |
0e0f498c06 | ||
![]() |
0a66f54487 | ||
![]() |
5e2f373a57 | ||
![]() |
ae8f47500f | ||
![]() |
36c1e19ef0 | ||
![]() |
dc933a5e66 | ||
![]() |
c7699a5a3b | ||
![]() |
0f656aa7a9 | ||
![]() |
1af8481fff | ||
![]() |
93af5f8fbb | ||
![]() |
7056bbdf51 | ||
![]() |
c4eaee1e31 | ||
![]() |
4f688862a2 | ||
![]() |
3787c6ec70 | ||
![]() |
25d73a59ad | ||
![]() |
9f701d0f2e | ||
![]() |
47fb612a5a | ||
![]() |
b8ff5fed7c | ||
![]() |
3e7ff96445 | ||
![]() |
558e3b1032 | ||
![]() |
65279b3364 | ||
![]() |
d3ca184570 | ||
![]() |
40a2322e09 | ||
![]() |
0b593b343e | ||
![]() |
83dc62239f | ||
![]() |
34cb44f2be | ||
![]() |
55a82b631e | ||
![]() |
0b7e1bcfc4 | ||
![]() |
babd5336a0 | ||
![]() |
b358231b20 | ||
![]() |
4579fa52ac | ||
![]() |
b4449e4998 | ||
![]() |
d5b1dceb66 | ||
![]() |
8f46757c0d | ||
![]() |
87378fc79c | ||
![]() |
95f44cbe9a | ||
![]() |
8849ddab81 | ||
![]() |
9a47714645 | ||
![]() |
b1396b98a3 | ||
![]() |
c3433baf0c | ||
![]() |
fab692c386 | ||
![]() |
834f599fb1 | ||
![]() |
701207dcc5 | ||
![]() |
19ba37dfad | ||
![]() |
284228ef16 | ||
![]() |
ad2de3a828 | ||
![]() |
797e1a105d | ||
![]() |
9c00e7f45c | ||
![]() |
26a1b1377d | ||
![]() |
df2bb228c5 | ||
![]() |
49db47c12c | ||
![]() |
cc1e5edaec | ||
![]() |
f6060261a1 | ||
![]() |
8c73253a52 | ||
![]() |
4106645d6e | ||
![]() |
c68c35e084 | ||
![]() |
fd34b1a291 | ||
![]() |
bfc987f81b | ||
![]() |
c93c52a58c | ||
![]() |
e72c6eed24 | ||
![]() |
646e327ed2 | ||
![]() |
cb5c219ffe | ||
![]() |
3794002c7b | ||
![]() |
bd2b32bfbc | ||
![]() |
884528927e | ||
![]() |
4688b1fe23 | ||
![]() |
dfd558f848 | ||
![]() |
d2e065d273 | ||
![]() |
84a52342ab | ||
![]() |
6f3d5e9fb8 | ||
![]() |
7d18eb8b02 | ||
![]() |
7e3eb5e14d | ||
![]() |
4a76ba4376 | ||
![]() |
8245e878e3 | ||
![]() |
e64a7809e4 | ||
![]() |
28ed9879aa | ||
![]() |
d4a761ceff | ||
![]() |
7f7313d69a | ||
![]() |
6ec7dba751 | ||
![]() |
33564974b8 | ||
![]() |
baaa9f68dc | ||
![]() |
0142f8bf0c | ||
![]() |
ad534ddbb6 | ||
![]() |
673a59e4c4 | ||
![]() |
39d848c62c | ||
![]() |
35059b7507 | ||
![]() |
f698c914f6 | ||
![]() |
02cccf9e27 | ||
![]() |
54e763c71e | ||
![]() |
4c9709a2bb | ||
![]() |
297b5bc55c | ||
![]() |
ab9cb063b2 | ||
![]() |
b2b32ce67b | ||
![]() |
7aeb1ec8d9 | ||
![]() |
50b51f931e | ||
![]() |
bf353875b0 | ||
![]() |
87eab2a9b0 | ||
![]() |
dcd5197a19 | ||
![]() |
a02e12abe8 | ||
![]() |
ce17ccad27 | ||
![]() |
25f1660efc | ||
![]() |
74c7eb616f | ||
![]() |
81f1dc9839 | ||
![]() |
2269a95b99 | ||
![]() |
bf2a3ca043 | ||
![]() |
7e4becd6b6 | ||
![]() |
d400ac5705 | ||
![]() |
61e57c9373 | ||
![]() |
db1cd7dd6b | ||
![]() |
8680bcda61 | ||
![]() |
5db40a0ede | ||
![]() |
d4e80ef268 | ||
![]() |
262a4e2bfd | ||
![]() |
1037798879 | ||
![]() |
bcfdde65b0 | ||
![]() |
73d145616a | ||
![]() |
cf6380b3c7 | ||
![]() |
0593aaa0c1 | ||
![]() |
24babd47a2 | ||
![]() |
b4b24a4f70 | ||
![]() |
ad411344db | ||
![]() |
2097d2e4e4 | ||
![]() |
2a2643641e | ||
![]() |
08a081437f | ||
![]() |
b1d89175fc | ||
![]() |
97e57dcbab | ||
![]() |
f46fa72556 | ||
![]() |
242c2fc04a | ||
![]() |
1523cfdc45 | ||
![]() |
5d9b5a063b | ||
![]() |
0417c47fe2 | ||
![]() |
0da5717bb5 | ||
![]() |
73c4ec378b | ||
![]() |
1b54791905 | ||
![]() |
4299062bd0 | ||
![]() |
015ef402eb | ||
![]() |
378c6c576c | ||
![]() |
b6cb95695e | ||
![]() |
c922b49731 | ||
![]() |
60c4f86b08 | ||
![]() |
afdb8e0d37 | ||
![]() |
502a458dfd | ||
![]() |
ff986a99b6 | ||
![]() |
939c2a2494 | ||
![]() |
38234c005e | ||
![]() |
a67e5357ef | ||
![]() |
9fe4af9550 | ||
![]() |
6622611ee3 | ||
![]() |
ecb4bfde0b | ||
![]() |
1bee297bba | ||
![]() |
0e7817f7e5 | ||
![]() |
fafd1126f4 | ||
![]() |
a67f167666 | ||
![]() |
7e65648412 | ||
![]() |
003170e6d8 | ||
![]() |
28accff9ba | ||
![]() |
e1d2c576a9 | ||
![]() |
7e6722f0f8 | ||
![]() |
d909ac0e59 | ||
![]() |
2869e53421 | ||
![]() |
0b145682ba | ||
![]() |
0ef52adb18 | ||
![]() |
4b76b70ea0 | ||
![]() |
586fa99065 | ||
![]() |
26184aca10 | ||
![]() |
79ed4d5f50 | ||
![]() |
87b546e7fb | ||
![]() |
a4b8fe41c0 | ||
![]() |
8b44bf4d9b | ||
![]() |
e09b7c592c | ||
![]() |
6ea5d1a1ff | ||
![]() |
c5fa1122ae | ||
![]() |
7fa75a3d54 | ||
![]() |
358f94a7ec | ||
![]() |
07ac539c8f | ||
![]() |
c36075f4e3 | ||
![]() |
54746af5de | ||
![]() |
862e08a06c | ||
![]() |
748f70ba87 | ||
![]() |
9425f0ca1a | ||
![]() |
4a3d7002eb | ||
![]() |
6d94ccb756 | ||
![]() |
6cf83c5c1a | ||
![]() |
4bce257189 | ||
![]() |
c495fb92f3 | ||
![]() |
3102b4bdb7 | ||
![]() |
4e232602db | ||
![]() |
d5ecf1e8dd | ||
![]() |
c019cf57e5 | ||
![]() |
0db3d7ffd3 | ||
![]() |
ab846be65e | ||
![]() |
1a4e83cb5a | ||
![]() |
7cd5d5b4c3 | ||
![]() |
ec4757d6de | ||
![]() |
6447af8541 | ||
![]() |
209c1f8bc2 | ||
![]() |
6a37dfc35f | ||
![]() |
5e101a4d32 | ||
![]() |
c29ea4693d | ||
![]() |
7d0df7aa80 | ||
![]() |
db80be4d38 | ||
![]() |
146313e7db | ||
![]() |
357ac3d7fb | ||
![]() |
1275d9a185 | ||
![]() |
75f2ced937 | ||
![]() |
cd2ac25ff6 | ||
![]() |
1d603043c5 | ||
![]() |
c77f2d1569 | ||
![]() |
78e3e6bd5f | ||
![]() |
79a854e899 | ||
![]() |
4b1dbeb11f | ||
![]() |
6d235b6715 | ||
![]() |
05a95421c4 | ||
![]() |
0be654f750 | ||
![]() |
1c94a5a33d | ||
![]() |
3614015d18 | ||
![]() |
a8bffc013f | ||
![]() |
4cdac0dbe1 | ||
![]() |
74c91db35e | ||
![]() |
d06cdb5ee8 | ||
![]() |
cbb0d712dd | ||
![]() |
465a61d599 | ||
![]() |
03d8990985 | ||
![]() |
00f4db17bd | ||
![]() |
e4d9100196 | ||
![]() |
09e2381475 | ||
![]() |
af51aa81f1 | ||
![]() |
bf6fd18de8 | ||
![]() |
effa07ecc2 | ||
![]() |
cbf9ec0901 | ||
![]() |
ede18ded40 | ||
![]() |
6d14ecc60a | ||
![]() |
c2d7ac0c25 | ||
![]() |
9f2216fdc5 | ||
![]() |
7ed0fe05f3 | ||
![]() |
c4fe21e87f | ||
![]() |
74d2ccfb43 | ||
![]() |
ea685057e0 | ||
![]() |
3f150832ac | ||
![]() |
c0bce9cf97 | ||
![]() |
a446313119 | ||
![]() |
0e8e713436 | ||
![]() |
1a643126de | ||
![]() |
6fa72e4a52 | ||
![]() |
7f127ba52a | ||
![]() |
f94182e8ba | ||
![]() |
b607ab72cd | ||
![]() |
5b84b37ded | ||
![]() |
089c5874c9 | ||
![]() |
f66ab2e008 | ||
![]() |
dc7e17085d | ||
![]() |
dc4dd53771 | ||
![]() |
8193b86202 | ||
![]() |
6616c33d2a | ||
![]() |
ec6eab8a49 | ||
![]() |
bd1169a8c7 | ||
![]() |
e3e60facf9 | ||
![]() |
fc0fa3c519 | ||
![]() |
acffbe1385 | ||
![]() |
cd31384885 | ||
![]() |
9522ec43c7 | ||
![]() |
83169fbf6d | ||
![]() |
9c7629ea47 | ||
![]() |
85d1888ba7 | ||
![]() |
9e7e8ed7a6 | ||
![]() |
cbe7967310 | ||
![]() |
9e1f56c0c1 | ||
![]() |
3604971111 | ||
![]() |
c43ac4f787 | ||
![]() |
2a15f5fb51 | ||
![]() |
7cd5af5e72 | ||
![]() |
cbdfb15117 | ||
![]() |
10ccd4767a | ||
![]() |
7ba71e3b37 | ||
![]() |
670a95a01d | ||
![]() |
7eb0e9db49 | ||
![]() |
4f160ee943 | ||
![]() |
aad1c610a6 | ||
![]() |
305d14c16b | ||
![]() |
6ca9fb2440 | ||
![]() |
8581d33574 | ||
![]() |
fab1c7e986 | ||
![]() |
acea26717c | ||
![]() |
e6bcb4628a | ||
![]() |
c4f08d541d | ||
![]() |
58546751dd | ||
![]() |
5470c9a002 | ||
![]() |
8885b45259 | ||
![]() |
85632b24fc | ||
![]() |
96802c7b5c | ||
![]() |
e5207f8b42 | ||
![]() |
9d573e1b1d | ||
![]() |
dd276aabc1 | ||
![]() |
e4d0635ae1 | ||
![]() |
60f534d7a1 | ||
![]() |
8036c831a5 | ||
![]() |
942e042933 | ||
![]() |
223ddaa9bf | ||
![]() |
1d6c722c28 | ||
![]() |
9c9dd6c7bf | ||
![]() |
7ff48a6d84 | ||
![]() |
645e16fd90 | ||
![]() |
1bb58a10e2 | ||
![]() |
118788436e | ||
![]() |
0b0f7919a2 | ||
![]() |
c8e23fb6ce | ||
![]() |
bc10717f61 | ||
![]() |
e621dd3b28 | ||
![]() |
20208be556 | ||
![]() |
9074733aab | ||
![]() |
ae0ee61e7d | ||
![]() |
ac797196f5 | ||
![]() |
30aa64e9c6 | ||
![]() |
b992add77b | ||
![]() |
88ebd963f7 | ||
![]() |
96baa2978d | ||
![]() |
c01609b858 | ||
![]() |
c89f0e5547 | ||
![]() |
10dfcbf0b9 | ||
![]() |
43446d56c5 | ||
![]() |
e66f2ab36b | ||
![]() |
63def07a0e | ||
![]() |
1ba7710af8 | ||
![]() |
8f13a7ec97 | ||
![]() |
93dff5cf7a | ||
![]() |
6a0450b9f6 | ||
![]() |
fffeadd8ea | ||
![]() |
b697e058d9 | ||
![]() |
14db8b1283 | ||
![]() |
45ad8621cf | ||
![]() |
dee3a18ea8 | ||
![]() |
950cf714d9 | ||
![]() |
652184506b | ||
![]() |
89f2cd6ec0 | ||
![]() |
6457cac797 | ||
![]() |
f66c2ba171 | ||
![]() |
6133c97f45 | ||
![]() |
0dc71ce37a | ||
![]() |
c96a05a8f9 | ||
![]() |
c190dc4792 | ||
![]() |
ebf91d27c7 | ||
![]() |
63301ee771 | ||
![]() |
7da827a06a | ||
![]() |
00fc5217f5 | ||
![]() |
04e725bb50 | ||
![]() |
e6617ff8e8 | ||
![]() |
1b0a958436 | ||
![]() |
5053d470f6 | ||
![]() |
8de5c53485 | ||
![]() |
ec3ae7c7b8 | ||
![]() |
c46af7d194 | ||
![]() |
5254e85840 | ||
![]() |
5883f6e763 | ||
![]() |
c02383d7d9 | ||
![]() |
f98e5cc22d | ||
![]() |
9fbb61a744 | ||
![]() |
5191907af0 | ||
![]() |
35a69b4b1d | ||
![]() |
f947856a61 | ||
![]() |
c4967532e4 | ||
![]() |
7dc560e1f2 | ||
![]() |
ab03198ba6 | ||
![]() |
a64f520644 | ||
![]() |
5aced46345 | ||
![]() |
3cd485069d | ||
![]() |
fabb07bb28 | ||
![]() |
2328ea6d07 | ||
![]() |
0375194e7d | ||
![]() |
5a6a6bcc78 | ||
![]() |
c8f475bba1 | ||
![]() |
31f3757880 | ||
![]() |
a60a9bb144 | ||
![]() |
21a90bb7ee | ||
![]() |
6a8e38476f | ||
![]() |
2f66913813 | ||
![]() |
d9b042d9e3 | ||
![]() |
ef9044d933 | ||
![]() |
12c9dbf1bf | ||
![]() |
8cc8aa8693 | ||
![]() |
e529b16956 | ||
![]() |
ffe8d4b689 | ||
![]() |
4e5a20ec45 | ||
![]() |
7c9ef58acd | ||
![]() |
d076fe72cd | ||
![]() |
25fbbfaf94 | ||
![]() |
9df27f43de | ||
![]() |
759e9846ad | ||
![]() |
3aeba7ca8a | ||
![]() |
2a44a091c8 | ||
![]() |
4c92aebc3c | ||
![]() |
d4ecd0dfab | ||
![]() |
3f790d01fa | ||
![]() |
e7b068ed8e | ||
![]() |
bd485937c4 | ||
![]() |
8edc332a4e | ||
![]() |
bb5028364b | ||
![]() |
ef070a4e0e | ||
![]() |
6787d0224c | ||
![]() |
8a43e24095 | ||
![]() |
f879f549e4 | ||
![]() |
db55484163 | ||
![]() |
4d8f66f28e | ||
![]() |
7a44061fa3 | ||
![]() |
5d4bb42e39 | ||
![]() |
3a6c22da5c | ||
![]() |
064f0e414a | ||
![]() |
77db3cb6fa | ||
![]() |
b83a1fd102 | ||
![]() |
99c519c065 | ||
![]() |
632e52b38d | ||
![]() |
1b66ffac6c | ||
![]() |
ee9052ad3d | ||
![]() |
550c74da77 | ||
![]() |
ccdd450283 | ||
![]() |
224a607bc3 | ||
![]() |
8fcd23663c | ||
![]() |
ad79a71fbd | ||
![]() |
d862a59349 | ||
![]() |
2d6362dddb | ||
![]() |
ee3ec3a4ea | ||
![]() |
daecfd97c2 | ||
![]() |
200a81d536 | ||
![]() |
8059ac89d3 | ||
![]() |
60f5f07dd6 | ||
![]() |
372d5ce413 | ||
![]() |
6f97819ca7 | ||
![]() |
2b2ee56712 | ||
![]() |
3715326034 | ||
![]() |
6cbb8b1753 | ||
![]() |
806896ea05 | ||
![]() |
fc8746e077 | ||
![]() |
e11df5bb49 | ||
![]() |
37a9e98ebc | ||
![]() |
80b4975188 | ||
![]() |
c4ef40f4dc | ||
![]() |
6a4bb6e3e1 | ||
![]() |
05ef926a7f | ||
![]() |
0007451735 | ||
![]() |
e599de038a | ||
![]() |
61472a995f | ||
![]() |
2a41802f36 | ||
![]() |
1d1cee17c3 | ||
![]() |
e99266f9d8 | ||
![]() |
1f2cd064f7 | ||
![]() |
9c2cf9eef7 | ||
![]() |
38b0b79644 | ||
![]() |
5252834075 | ||
![]() |
162df5eb6c | ||
![]() |
ac5e2e0532 | ||
![]() |
f0ba6afbdf | ||
![]() |
04a5f43472 | ||
![]() |
a15ef4b7ce | ||
![]() |
f1f9147433 | ||
![]() |
3c0d7de377 | ||
![]() |
2a57d74f1a | ||
![]() |
79717859b3 | ||
![]() |
be423939ed | ||
![]() |
086cceb271 | ||
![]() |
a14033afb7 | ||
![]() |
cc89a342ed | ||
![]() |
25c3669564 | ||
![]() |
21eff0b2ec | ||
![]() |
472fd72c82 | ||
![]() |
429a9a42d3 | ||
![]() |
90c525e99a | ||
![]() |
196117998a | ||
![]() |
630cbc77a8 | ||
![]() |
b6e4afe321 | ||
![]() |
59085ff8c8 | ||
![]() |
a4274c6301 | ||
![]() |
b4ef44b343 | ||
![]() |
08bc97582b | ||
![]() |
3952c88510 | ||
![]() |
b1f27b9da7 | ||
![]() |
171b258d5c | ||
![]() |
af971b6a19 | ||
![]() |
7ca026393b | ||
![]() |
f8784ae3c7 | ||
![]() |
3ddc3acf4c | ||
![]() |
ff430f5e33 | ||
![]() |
daf2890161 | ||
![]() |
4ca639323d | ||
![]() |
a92bf155a3 | ||
![]() |
d153772eb2 | ||
![]() |
cdc8fe86ce | ||
![]() |
4844037ce9 | ||
![]() |
691c1e1a37 | ||
![]() |
bd55b91a86 | ||
![]() |
8842f53696 | ||
![]() |
ffed9f6116 | ||
![]() |
50e8f45601 | ||
![]() |
8cbfe9e6cf | ||
![]() |
99ad3dc292 | ||
![]() |
6908355d38 | ||
![]() |
7b948f83c3 | ||
![]() |
34b2b96158 | ||
![]() |
d1573a0a6e | ||
![]() |
16d6bda85d | ||
![]() |
4b3eb2ece5 | ||
![]() |
1089de6321 | ||
![]() |
d00dc798f4 | ||
![]() |
f6b32823ba | ||
![]() |
9e34fee58c | ||
![]() |
1684a2110c | ||
![]() |
5e00e34552 | ||
![]() |
ce204eba62 | ||
![]() |
c7cb652322 | ||
![]() |
f8ccc3128e | ||
![]() |
4a8baaef45 | ||
![]() |
a9f3939c83 | ||
![]() |
d8cb950248 | ||
![]() |
aefc51db4b | ||
![]() |
fb18ea7ff8 | ||
![]() |
407c61e212 | ||
![]() |
d8e6ad48ca | ||
![]() |
bd42f4188f | ||
![]() |
f766f383ea | ||
![]() |
1a9922d790 | ||
![]() |
6213623431 | ||
![]() |
2809ee7a3e | ||
![]() |
281cae7a18 | ||
![]() |
e1ead9d2ef | ||
![]() |
359a9a96d6 | ||
![]() |
b6cfb8a3dc | ||
![]() |
6f028ecb19 | ||
![]() |
8695466690 | ||
![]() |
bdb1be9967 | ||
![]() |
9395df4cc3 | ||
![]() |
93edb333d4 | ||
![]() |
30eeef46c2 | ||
![]() |
8b584f3922 | ||
![]() |
43b859f778 | ||
![]() |
d1bd7f695f | ||
![]() |
312e1378d3 | ||
![]() |
93f2518159 | ||
![]() |
273f731dd5 | ||
![]() |
c7cd9e86ac | ||
![]() |
41fb6f5464 | ||
![]() |
03b1a8bd41 | ||
![]() |
1edfa78a05 | ||
![]() |
f47c5e53b1 | ||
![]() |
a48cbc6971 | ||
![]() |
73be8cf074 | ||
![]() |
002a1412cb | ||
![]() |
4e1423d224 | ||
![]() |
9bcccc87e6 | ||
![]() |
039a8e0b87 | ||
![]() |
76f7165462 | ||
![]() |
fdf0d8e9c8 | ||
![]() |
369fd95e2b | ||
![]() |
e242adec66 | ||
![]() |
58e562f7d4 | ||
![]() |
a8b5534838 | ||
![]() |
2581fa4176 | ||
![]() |
d90b1ca5be | ||
![]() |
845663f80f | ||
![]() |
9530af95f4 | ||
![]() |
c1efa78820 | ||
![]() |
d61797fa3a | ||
![]() |
cc6989b4f9 | ||
![]() |
fc31458cc4 |
38
.github/CONTRIBUTING.md
vendored
38
.github/CONTRIBUTING.md
vendored
@@ -12,57 +12,53 @@ add a comment to it. You'll see exactly what is sent, the system is 100% transpa
|
|||||||
## Issue reporting/feature requests
|
## Issue reporting/feature requests
|
||||||
|
|
||||||
* Search the [existing issues](https://github.com/TeamNewPipe/NewPipe/issues) first to make sure your issue/feature
|
* Search the [existing issues](https://github.com/TeamNewPipe/NewPipe/issues) first to make sure your issue/feature
|
||||||
hasn't been reported/requested before
|
hasn't been reported/requested before.
|
||||||
* Check whether your issue/feature is already fixed/implemented
|
* Check whether your issue/feature is already fixed/implemented.
|
||||||
* Check if the issue still exists in the latest release/beta version
|
* Check if the issue still exists in the latest release/beta version.
|
||||||
* If you are an Android/Java developer, you are always welcome to fix/implement an issue/a feature yourself. PRs welcome!
|
* If you are an Android/Java developer, you are always welcome to fix an issue or implement a feature yourself. PRs welcome!
|
||||||
* We use English for development. Issues in other languages will be closed and ignored.
|
* We use English for development. Issues in other languages will be closed and ignored.
|
||||||
* Please only add *one* issue at a time. Do not put multiple issues into one thread.
|
* Please only add *one* issue at a time. Do not put multiple issues into one thread.
|
||||||
* When reporting a bug please give us a context, and a description how to reproduce it.
|
* Follow the template! Issues or feature requests not matching the template might be closed.
|
||||||
* Issues that only contain a generated bug report, but no description might be closed.
|
|
||||||
|
|
||||||
## Bug Fixing
|
## Bug Fixing
|
||||||
* If you want to help NewPipe to become free of bugs (this is our utopic goal for NewPipe), you can send us an email to
|
* If you want to help NewPipe to become free of bugs (this is our utopic goal for NewPipe), you can send us an email to
|
||||||
tnp@newpipe.schabi.org to let me know that you intend to help. We'll send you further instructions. You may, on request,
|
<a href="mailto:tnp@newpipe.schabi.org">tnp@newpipe.schabi.org</a> to let us know that you intend to help. We'll send you further instructions. You may, on request,
|
||||||
register at our [Sentry](https://sentry.schabi.org) instance (see section "Crash reporting" for more information.
|
register at our [Sentry](https://sentry.schabi.org) instance (see section "Crash reporting" for more information).
|
||||||
|
|
||||||
## Translation
|
## Translation
|
||||||
|
|
||||||
* NewPipe can be translated via [Weblate](https://hosted.weblate.org/projects/newpipe/strings/). You can log in there
|
* NewPipe is translated via [Weblate](https://hosted.weblate.org/projects/newpipe/strings/). You can log in there
|
||||||
with your GitHub account.
|
with your GitHub account.
|
||||||
|
* If the language you want to translate is not on Weblate, you can add it: see [How to add a new language](https://github.com/TeamNewPipe/NewPipe/wiki/How-to-add-a-new-language-to-NewPipe) in the wiki.
|
||||||
|
|
||||||
## Code contribution
|
## Code contribution
|
||||||
|
|
||||||
* Stick to NewPipe's style conventions (well, just look the other code and then do it the same way :))
|
* Stick to NewPipe's style conventions: follow [checkStyle](https://github.com/checkstyle/checkstyle). It will run each time you build the project.
|
||||||
* Do not bring non-free software (e.g., binary blobs) into the project. Also, make sure you do not introduce Google
|
* Do not bring non-free software (e.g. binary blobs) into the project. Also, make sure you do not introduce Google
|
||||||
libraries.
|
libraries.
|
||||||
* Stick to [F-Droid contribution guidelines](https://f-droid.org/wiki/page/Inclusion_Policy)
|
* Stick to [F-Droid contribution guidelines](https://f-droid.org/wiki/page/Inclusion_Policy).
|
||||||
* Make changes on a separate branch, not on the master branch. This is commonly known as *feature branch workflow*. You
|
* Make changes on a separate branch with a meaningful name, not on the master neither dev branch. This is commonly known as *feature branch workflow*. You
|
||||||
may then send your changes as a pull request on GitHub. Patches to the email address mentioned in this document might
|
may then send your changes as a pull request (PR) on GitHub.
|
||||||
not be considered, GitHub is the primary platform. (This only affects you if you are a member of TeamNewPipe)
|
|
||||||
* When submitting changes, you confirm that your code is licensed under the terms of the
|
* When submitting changes, you confirm that your code is licensed under the terms of the
|
||||||
[GNU General Public License v3](https://www.gnu.org/licenses/gpl-3.0.html).
|
[GNU General Public License v3](https://www.gnu.org/licenses/gpl-3.0.html).
|
||||||
* Please test (compile and run) your code before you submit changes! Ideally, provide test feedback in the PR
|
* Please test (compile and run) your code before you submit changes! Ideally, provide test feedback in the PR
|
||||||
description. Untested code will **not** be merged!
|
description. Untested code will **not** be merged!
|
||||||
* Try to figure out yourself why builds on our CI fail.
|
* Try to figure out yourself why builds on our CI fail.
|
||||||
* Make sure your PR is up-to-date with the rest of the code. Often, a simple click on "Update branch" will do the job,
|
* Make sure your PR is up-to-date with the rest of the code. Often, a simple click on "Update branch" will do the job,
|
||||||
but if not, you are asked to merge the master branch manually and resolve the problems on your own. That will make the
|
but if not, you are asked to rebase the dev branch manually and resolve the problems on your own. You can find help [on the wiki](https://github.com/TeamNewPipe/NewPipe/wiki/How-to-merge-a-PR). That will make the
|
||||||
maintainers' jobs way easier.
|
maintainers' jobs way easier.
|
||||||
* Please show intention to maintain your features and code after you contributed it. Unmaintained code is a hassle for
|
* Please show intention to maintain your features and code after you contributed it. Unmaintained code is a hassle for
|
||||||
the core developers, and just adds work. If you do not intend to maintain features you contributed, please think again
|
the core developers, and just adds work. If you do not intend to maintain features you contributed, please think again
|
||||||
about submission, or clearly state that in the description of your PR.
|
about submission, or clearly state that in the description of your PR.
|
||||||
* Respond yourselves if someone requests changes or otherwise raises issues about your PRs.
|
* Respond yourselves if someone requests changes or otherwise raises issues about your PRs.
|
||||||
* Check if your contributions align with the [fdroid inclusion guidelines](https://f-droid.org/en/docs/Inclusion_Policy/).
|
|
||||||
* Check if your submission can be build with the current fdroid build server setup.
|
|
||||||
* Send PR that only cover one specific issue/solution/bug. Do not send PRs that are huge and consists of multiple
|
* Send PR that only cover one specific issue/solution/bug. Do not send PRs that are huge and consists of multiple
|
||||||
independent solutions.
|
independent solutions.
|
||||||
|
|
||||||
## Communication
|
## Communication
|
||||||
|
|
||||||
* WE DO NOW HAVE A MAILING LIST: [newpipe@list.schabi.org](https://list.schabi.org/cgi-bin/mailman/listinfo/newpipe).
|
|
||||||
* There is an IRC channel on Freenode which is regularly visited by the core team and other developers:
|
* There is an IRC channel on Freenode which is regularly visited by the core team and other developers:
|
||||||
[#newpipe](irc:irc.freenode.net/newpipe). [Click here for Webchat](https://webchat.freenode.net/?channels=newpipe)!
|
[#newpipe](irc:irc.freenode.net/newpipe). [Click here for Webchat](https://webchat.freenode.net/?channels=newpipe)!
|
||||||
* If you want to get in touch with the core team or one of our other contributors you can send an email to
|
* If you want to get in touch with the core team or one of our other contributors you can send an email to
|
||||||
tnp(at)schabi.org. Please do not send issue reports, they will be ignored and remain unanswered! Use the GitHub issue
|
<a href="mailto:tnp@newpipe.schabi.org">tnp@newpipe.schabi.org</a>. Please do not send issue reports, they will be ignored and remain unanswered! Use the GitHub issue
|
||||||
tracker described above!
|
tracker described above!
|
||||||
* Feel free to post suggestions, changes, ideas etc. on GitHub, IRC or the mailing list!
|
* Feel free to post suggestions, changes, ideas etc. on GitHub or IRC!
|
||||||
|
1
.github/FUNDING.yml
vendored
Normal file
1
.github/FUNDING.yml
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
liberapay: TeamNewPipe
|
3
.github/ISSUE_TEMPLATE.md
vendored
3
.github/ISSUE_TEMPLATE.md
vendored
@@ -1,3 +0,0 @@
|
|||||||
- [ ] I carefully read the [contribution guidelines](https://github.com/TeamNewPipe/NewPipe/blob/HEAD/.github/CONTRIBUTING.md) and agree to them.
|
|
||||||
- [ ] I checked if the issue/feature exists in the latest version.
|
|
||||||
- [ ] I did use the [incredible bugreport to markdown converter](https://teamnewpipe.github.io/CrashReportToMarkdown/) to paste bug reports.
|
|
46
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
46
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
---
|
||||||
|
name: Bug report
|
||||||
|
about: Create a bug report to help us improve
|
||||||
|
labels: bug
|
||||||
|
assignees: ''
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Oh no, a bug! It happens. Thanks for reporting an issue with NewPipe. If this is your first bug report, read the following information before proceeding:
|
||||||
|
|
||||||
|
Please note, we only support the latest version of NewPipe. In order to check your app version, open the left drawer and click on "About". If you don't have the latest version, upgrade to it and reproduce the problem before opening the issue. The release page (https://github.com/TeamNewPipe/NewPipe/releases/latest) is where you can get it.
|
||||||
|
|
||||||
|
P.S.: Our contribution guidelines might be a nice document to read before you fill out the report :) You can find it at https://github.com/TeamNewPipe/NewPipe/blob/HEAD/.github/CONTRIBUTING.md
|
||||||
|
|
||||||
|
To make it easier for us to help you please enter detailed information in the template we have provided below. If a section isn't relevant, just delete it, though it would be helpful to still provide as much detail as possible.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- The comments between these brackets won't show up in the submitted issue (as you can see in the preview). -->
|
||||||
|
|
||||||
|
### Version
|
||||||
|
<!-- Which version are you using? Hopefully the latest! We just told you that above! -->
|
||||||
|
-
|
||||||
|
|
||||||
|
### Steps to reproduce the bug
|
||||||
|
<!--
|
||||||
|
1. Go to '...'
|
||||||
|
2. Press on '....'
|
||||||
|
3. Swipe down to '....'
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- If you can't cause the bug to show up again reliably (and hence don't have a proper set of steps to give us), please still try to give as many details as possible on how you think you encountered the bug. -->
|
||||||
|
|
||||||
|
### Expected behavior
|
||||||
|
<!-- Tell us what you expect to happen. -->
|
||||||
|
|
||||||
|
### Actual behaviour
|
||||||
|
<!-- Tell us what happens instead. -->
|
||||||
|
|
||||||
|
### Screenshots/Screen recordings
|
||||||
|
<!-- If applicable, add screenshots or a screen recording to help explain your problem. GitHub supports uploading them directly in the issue text box. If your file is too big for Github to accept, feel free to paste a link from an image/video hoster here instead. -->
|
||||||
|
|
||||||
|
### Logs
|
||||||
|
<!-- If your bug includes a crash (where you're shown the Error Report page with a bunch of info), copy it to the clipboard (there is a share button for this), head over to our bug report to markdown converter at https://teamnewpipe.github.io/CrashReportToMarkdown/ and paste it. Copy the converted text (it is MUCH easier to read this way) from there and paste it here: -->
|
||||||
|
|
||||||
|
<!-- That's right, here! -->
|
39
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
39
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
---
|
||||||
|
name: Feature request
|
||||||
|
about: Suggest an idea for this project
|
||||||
|
labels: enhancement
|
||||||
|
assignees: ''
|
||||||
|
|
||||||
|
---
|
||||||
|
<!-- Hey. Our contribution guidelines (https://github.com/TeamNewPipe/NewPipe/blob/HEAD/.github/CONTRIBUTING.md) might be an appropriate
|
||||||
|
document to read before you fill out the request :) -->
|
||||||
|
|
||||||
|
<!-- The comments between these brackets won't show up in the submitted issue (as you can see in the preview). -->
|
||||||
|
|
||||||
|
#### Describe the feature you want
|
||||||
|
<!-- A clear and concise description of what you want to happen. PLEASE MAKE SURE it is one feature ONLY. You should open separate issues for separate feature requests, because those issues will be used to track their status.
|
||||||
|
Example: *I think it would be nice if you add feature Y which makes X possible.*
|
||||||
|
|
||||||
|
Optionally, also describe alternatives you've considered.
|
||||||
|
Example: *Z is also a good alternative. Not as good as Y, but at least...* or *I considered Z, but that didn't turn out to be a good idea because...* -->
|
||||||
|
|
||||||
|
<!-- Write below this -->
|
||||||
|
|
||||||
|
#### Is your feature request related to a problem? Please describe it
|
||||||
|
<!-- A clear and concise description of what the problem is. Maybe the developers could brainstorm and come up with a better solution to your problem. If they exist, link to related Issues and/or PRs for developers to keep track easier.
|
||||||
|
Example: *I want to do X, but there is no way to do it.* -->
|
||||||
|
|
||||||
|
<!-- Write below this -->
|
||||||
|
|
||||||
|
#### Additional context
|
||||||
|
<!-- Add any other context, like screenshots, about the feature request here.
|
||||||
|
Example: *Here's a photo of my cat!* -->
|
||||||
|
|
||||||
|
<!-- Write below this -->
|
||||||
|
|
||||||
|
#### How will you/everyone benefit from this feature?
|
||||||
|
<!-- Convince us! How does it change your NewPipe experience and/or your life?
|
||||||
|
The better this paragraph is, the more likely a developer will think about working on it.
|
||||||
|
Example: *This feature will help us colonize the galaxy! -->
|
||||||
|
|
||||||
|
<!-- Write below this -->
|
27
.github/PULL_REQUEST_TEMPLATE.md
vendored
27
.github/PULL_REQUEST_TEMPLATE.md
vendored
@@ -1 +1,28 @@
|
|||||||
|
<!-- Hey there. Thank you so much for improving NewPipe. Please take a moment to fill out the following suggestion on how to structure this PR description. Having roughly the same layout helps everyone considerably :)-->
|
||||||
|
|
||||||
|
#### What is it?
|
||||||
|
- [ ] Bug fix (user facing)
|
||||||
|
- [ ] Feature (user facing)
|
||||||
|
- [ ] Code base improvement (dev facing)
|
||||||
|
- [ ] Meta improvement to the project (dev facing)
|
||||||
|
|
||||||
|
#### Description of the changes in your PR
|
||||||
|
<!-- While bullet points are the norm in this section, feel free to write a text instead if you can't fit it in a list -->
|
||||||
|
- record videos
|
||||||
|
- create clones
|
||||||
|
- take over the world
|
||||||
|
|
||||||
|
#### Fixes the following issue(s)
|
||||||
|
<!-- Also add reddit or other links which are relevant to your change. -->
|
||||||
|
-
|
||||||
|
|
||||||
|
#### Relies on the following changes
|
||||||
|
<!-- Delete this if it doesn't apply to you. -->
|
||||||
|
-
|
||||||
|
|
||||||
|
#### Testing apk
|
||||||
|
<!-- Ensure that you have your changes on a new branch which has a meaningful name. This name will be used as a suffix for the app ID to allow installing and testing multiple versions of NewPipe. Do NOT name your branches like "patch-0" and "feature-1". For example, if your PR implements a bug fix for comments, an appropriate branch name would be "commentfix". -->
|
||||||
|
debug.zip
|
||||||
|
|
||||||
|
#### Agreement
|
||||||
- [ ] I carefully read the [contribution guidelines](https://github.com/TeamNewPipe/NewPipe/blob/HEAD/.github/CONTRIBUTING.md) and agree to them.
|
- [ ] I carefully read the [contribution guidelines](https://github.com/TeamNewPipe/NewPipe/blob/HEAD/.github/CONTRIBUTING.md) and agree to them.
|
||||||
|
9
.gitignore
vendored
9
.gitignore
vendored
@@ -7,7 +7,14 @@
|
|||||||
/app/app.iml
|
/app/app.iml
|
||||||
/.idea
|
/.idea
|
||||||
/*.iml
|
/*.iml
|
||||||
gradle.properties
|
|
||||||
*~
|
*~
|
||||||
.weblate
|
.weblate
|
||||||
*.class
|
*.class
|
||||||
|
|
||||||
|
# vscode / eclipse files
|
||||||
|
*.classpath
|
||||||
|
*.project
|
||||||
|
*.settings
|
||||||
|
bin/
|
||||||
|
.vscode/
|
||||||
|
*.code-workspace
|
||||||
|
@@ -5,13 +5,13 @@ android:
|
|||||||
components:
|
components:
|
||||||
# The BuildTools version used by NewPipe
|
# The BuildTools version used by NewPipe
|
||||||
- tools
|
- tools
|
||||||
- build-tools-28.0.3
|
- build-tools-29.0.3
|
||||||
|
|
||||||
# The SDK version used to compile NewPipe
|
# The SDK version used to compile NewPipe
|
||||||
- android-28
|
- android-29
|
||||||
|
|
||||||
before_install:
|
before_install:
|
||||||
- yes | sdkmanager "platforms;android-28"
|
- yes | sdkmanager "platforms;android-29"
|
||||||
script: ./gradlew -Dorg.gradle.jvmargs=-Xmx1536m assembleDebug lintDebug testDebugUnitTest
|
script: ./gradlew -Dorg.gradle.jvmargs=-Xmx1536m assembleDebug lintDebug testDebugUnitTest
|
||||||
|
|
||||||
licenses:
|
licenses:
|
||||||
|
18
README.md
18
README.md
@@ -4,16 +4,16 @@
|
|||||||
<p align="center"><a href="https://f-droid.org/packages/org.schabi.newpipe/"><img src="https://f-droid.org/wiki/images/0/06/F-Droid-button_get-it-on.png"></a></p>
|
<p align="center"><a href="https://f-droid.org/packages/org.schabi.newpipe/"><img src="https://f-droid.org/wiki/images/0/06/F-Droid-button_get-it-on.png"></a></p>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://github.com/TeamNewPipe/NewPipe" alt="GitHub release"><img src="https://img.shields.io/github/release/TeamNewPipe/NewPipe.svg" ></a>
|
<a href="https://github.com/TeamNewPipe/NewPipe/releases" alt="GitHub release"><img src="https://img.shields.io/github/release/TeamNewPipe/NewPipe.svg" ></a>
|
||||||
<a href="https://www.gnu.org/licenses/gpl-3.0" alt="License: GPLv3"><img src="https://img.shields.io/badge/License-GPL%20v3-blue.svg"></a>
|
<a href="https://www.gnu.org/licenses/gpl-3.0" alt="License: GPLv3"><img src="https://img.shields.io/badge/License-GPL%20v3-blue.svg"></a>
|
||||||
<a href="https://travis-ci.org/TeamNewPipe/NewPipe" alt="Build Status"><img src="https://travis-ci.org/TeamNewPipe/NewPipe.svg"></a>
|
<a href="https://travis-ci.org/TeamNewPipe/NewPipe" alt="Build Status"><img src="https://travis-ci.org/TeamNewPipe/NewPipe.svg"></a>
|
||||||
<a href="https://hosted.weblate.org/engage/NewPipe/" alt="Translation Status"><img src="https://hosted.weblate.org/widgets/NewPipe/-/svg-badge.svg"></a>
|
<a href="https://hosted.weblate.org/engage/newpipe/" alt="Translation Status"><img src="https://hosted.weblate.org/widgets/newpipe/-/svg-badge.svg"></a>
|
||||||
<a href="http://webchat.freenode.net/?channels=%23newpipe" alt="IRC channel: #newpipe"><img src="https://img.shields.io/badge/IRC%20chat-%23newpipe-brightgreen.svg"></a>
|
<a href="http://webchat.freenode.net/?channels=%23newpipe" alt="IRC channel: #newpipe"><img src="https://img.shields.io/badge/IRC%20chat-%23newpipe-brightgreen.svg"></a>
|
||||||
<a href="https://www.bountysource.com/teams/newpipe" alt="Bountysource bounties"><img src="https://img.shields.io/bountysource/team/newpipe/activity.svg?colorB=cd201f"></a>
|
<a href="https://www.bountysource.com/teams/newpipe" alt="Bountysource bounties"><img src="https://img.shields.io/bountysource/team/newpipe/activity.svg?colorB=cd201f"></a>
|
||||||
</p>
|
</p>
|
||||||
<hr>
|
<hr>
|
||||||
<p align="center"><a href="#screenshots">Screenshots</a> • <a href="#description">Description</a> • <a href="#features">Features</a> • <a href="#updates">Updates</a> • <a href="#contribution">Contribution</a> • <a href="#donate">Donate</a> • <a href="#license">License</a></p>
|
<p align="center"><a href="#screenshots">Screenshots</a> • <a href="#description">Description</a> • <a href="#features">Features</a> • <a href="#updates">Updates</a> • <a href="#contribution">Contribution</a> • <a href="#donate">Donate</a> • <a href="#license">License</a></p>
|
||||||
<p align="center"><a href="https://newpipe.schabi.org">Website</a> • <a href="https://newpipe.schabi.org/blog/">Blog</a> • <a href="https://newpipe.schabi.org/press/">Press</a></p>
|
<p align="center"><a href="https://newpipe.schabi.org">Website</a> • <a href="https://newpipe.schabi.org/blog/">Blog</a> • <a href="https://newpipe.schabi.org/FAQ/">FAQ</a> • <a href="https://newpipe.schabi.org/press/">Press</a></p>
|
||||||
<hr>
|
<hr>
|
||||||
|
|
||||||
<b>WARNING: THIS IS A BETA VERSION, THEREFORE YOU MAY ENCOUNTER BUGS. IF YOU DO, OPEN AN ISSUE VIA OUR GITHUB REPOSITORY.</b>
|
<b>WARNING: THIS IS A BETA VERSION, THEREFORE YOU MAY ENCOUNTER BUGS. IF YOU DO, OPEN AN ISSUE VIA OUR GITHUB REPOSITORY.</b>
|
||||||
@@ -66,15 +66,23 @@ NewPipe does not use any Google framework libraries, nor the YouTube API. Websit
|
|||||||
* Enqueue videos
|
* Enqueue videos
|
||||||
* Local playlists
|
* Local playlists
|
||||||
* Subtitles
|
* Subtitles
|
||||||
* Multi-service support (e.g. SoundCloud \[beta\])
|
|
||||||
* Livestream support
|
* Livestream support
|
||||||
|
* Show comments
|
||||||
|
|
||||||
### Coming Features
|
### Coming Features
|
||||||
|
|
||||||
* Cast to UPnP and Cast
|
* Cast to UPnP and Cast
|
||||||
* Show comments
|
|
||||||
* … and many more
|
* … and many more
|
||||||
|
|
||||||
|
### Supported Services
|
||||||
|
|
||||||
|
NewPipe supports multiple services. Our [docs](https://teamnewpipe.github.io/documentation/) provide more info on how a new service can be added to the app and the extractor. Please get in touch with us if you intend to add a new one. Currently supported services are:
|
||||||
|
|
||||||
|
* YouTube
|
||||||
|
* SoundCloud \[beta\]
|
||||||
|
* media.ccc.de \[beta\]
|
||||||
|
* PeerTube instances \[beta\]
|
||||||
|
|
||||||
## Updates
|
## Updates
|
||||||
When a change to the NewPipe code occurs (due to either adding features or bug fixing), eventually a release will occur. These are in the format x.xx.x . In order to get this new version, you can:
|
When a change to the NewPipe code occurs (due to either adding features or bug fixing), eventually a release will occur. These are in the format x.xx.x . In order to get this new version, you can:
|
||||||
* Build a debug APK yourself. This is the fastest way to get new features on your device, but is much more complicated, so we recommend using one of the other methods.
|
* Build a debug APK yourself. This is the fastest way to get new features on your device, but is much more complicated, so we recommend using one of the other methods.
|
||||||
|
2
app/.gitignore
vendored
2
app/.gitignore
vendored
@@ -1,3 +1,3 @@
|
|||||||
.gitignore
|
.gitignore
|
||||||
/build
|
/build
|
||||||
app.iml
|
*.iml
|
||||||
|
229
app/build.gradle
229
app/build.gradle
File diff suppressed because it is too large
Load Diff
3
app/proguard-rules.pro
vendored
3
app/proguard-rules.pro
vendored
@@ -17,6 +17,9 @@
|
|||||||
#}
|
#}
|
||||||
|
|
||||||
-dontobfuscate
|
-dontobfuscate
|
||||||
|
-keep class org.schabi.newpipe.extractor.timeago.patterns.** { *; }
|
||||||
|
-keep class org.ocpsoft.prettytime.i18n.** { *; }
|
||||||
|
|
||||||
-keep class org.mozilla.javascript.** { *; }
|
-keep class org.mozilla.javascript.** { *; }
|
||||||
|
|
||||||
-keep class org.mozilla.classfile.ClassFileWriter
|
-keep class org.mozilla.classfile.ClassFileWriter
|
||||||
|
479
app/schemas/org.schabi.newpipe.database.AppDatabase/2.json
Normal file
479
app/schemas/org.schabi.newpipe.database.AppDatabase/2.json
Normal file
File diff suppressed because it is too large
Load Diff
707
app/schemas/org.schabi.newpipe.database.AppDatabase/3.json
Normal file
707
app/schemas/org.schabi.newpipe.database.AppDatabase/3.json
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,119 @@
|
|||||||
|
package org.schabi.newpipe.database
|
||||||
|
|
||||||
|
import android.content.ContentValues
|
||||||
|
import android.database.sqlite.SQLiteDatabase
|
||||||
|
import androidx.room.Room
|
||||||
|
import androidx.room.testing.MigrationTestHelper
|
||||||
|
import androidx.sqlite.db.framework.FrameworkSQLiteOpenHelperFactory
|
||||||
|
import androidx.test.core.app.ApplicationProvider
|
||||||
|
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||||
|
import androidx.test.platform.app.InstrumentationRegistry
|
||||||
|
import org.junit.Assert.assertEquals
|
||||||
|
import org.junit.Assert.assertNull
|
||||||
|
import org.junit.Rule
|
||||||
|
import org.junit.Test
|
||||||
|
import org.junit.runner.RunWith
|
||||||
|
import org.schabi.newpipe.extractor.stream.StreamType
|
||||||
|
|
||||||
|
@RunWith(AndroidJUnit4::class)
|
||||||
|
class AppDatabaseTest {
|
||||||
|
companion object {
|
||||||
|
private const val DEFAULT_SERVICE_ID = 0
|
||||||
|
private const val DEFAULT_URL = "https://www.youtube.com/watch?v=cDphUib5iG4"
|
||||||
|
private const val DEFAULT_TITLE = "Test Title"
|
||||||
|
private val DEFAULT_TYPE = StreamType.VIDEO_STREAM
|
||||||
|
private const val DEFAULT_DURATION = 480L
|
||||||
|
private const val DEFAULT_UPLOADER_NAME = "Uploader Test"
|
||||||
|
private const val DEFAULT_THUMBNAIL = "https://example.com/example.jpg"
|
||||||
|
|
||||||
|
private const val DEFAULT_SECOND_SERVICE_ID = 0
|
||||||
|
private const val DEFAULT_SECOND_URL = "https://www.youtube.com/watch?v=ncQU6iBn5Fc"
|
||||||
|
}
|
||||||
|
|
||||||
|
@get:Rule
|
||||||
|
val testHelper = MigrationTestHelper(InstrumentationRegistry.getInstrumentation(),
|
||||||
|
AppDatabase::class.java.canonicalName, FrameworkSQLiteOpenHelperFactory())
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun migrateDatabaseFrom2to3() {
|
||||||
|
val databaseInV2 = testHelper.createDatabase(AppDatabase.DATABASE_NAME, Migrations.DB_VER_2)
|
||||||
|
|
||||||
|
databaseInV2.run {
|
||||||
|
insert("streams", SQLiteDatabase.CONFLICT_FAIL, ContentValues().apply {
|
||||||
|
// put("uid", null)
|
||||||
|
put("service_id", DEFAULT_SERVICE_ID)
|
||||||
|
put("url", DEFAULT_URL)
|
||||||
|
put("title", DEFAULT_TITLE)
|
||||||
|
put("stream_type", DEFAULT_TYPE.name)
|
||||||
|
put("duration", DEFAULT_DURATION)
|
||||||
|
put("uploader", DEFAULT_UPLOADER_NAME)
|
||||||
|
put("thumbnail_url", DEFAULT_THUMBNAIL)
|
||||||
|
})
|
||||||
|
insert("streams", SQLiteDatabase.CONFLICT_FAIL, ContentValues().apply {
|
||||||
|
// put("uid", null)
|
||||||
|
put("service_id", DEFAULT_SECOND_SERVICE_ID)
|
||||||
|
put("url", DEFAULT_SECOND_URL)
|
||||||
|
// put("title", null)
|
||||||
|
// put("stream_type", null)
|
||||||
|
// put("duration", null)
|
||||||
|
// put("uploader", null)
|
||||||
|
// put("thumbnail_url", null)
|
||||||
|
})
|
||||||
|
insert("streams", SQLiteDatabase.CONFLICT_FAIL, ContentValues().apply {
|
||||||
|
// put("uid", null)
|
||||||
|
put("service_id", DEFAULT_SERVICE_ID)
|
||||||
|
// put("url", null)
|
||||||
|
// put("title", null)
|
||||||
|
// put("stream_type", null)
|
||||||
|
// put("duration", null)
|
||||||
|
// put("uploader", null)
|
||||||
|
// put("thumbnail_url", null)
|
||||||
|
})
|
||||||
|
close()
|
||||||
|
}
|
||||||
|
|
||||||
|
testHelper.runMigrationsAndValidate(AppDatabase.DATABASE_NAME, Migrations.DB_VER_3,
|
||||||
|
true, Migrations.MIGRATION_2_3)
|
||||||
|
|
||||||
|
val migratedDatabaseV3 = getMigratedDatabase()
|
||||||
|
val listFromDB = migratedDatabaseV3.streamDAO().all.blockingFirst()
|
||||||
|
|
||||||
|
// Only expect 2, the one with the null url will be ignored
|
||||||
|
assertEquals(2, listFromDB.size)
|
||||||
|
|
||||||
|
val streamFromMigratedDatabase = listFromDB[0]
|
||||||
|
assertEquals(DEFAULT_SERVICE_ID, streamFromMigratedDatabase.serviceId)
|
||||||
|
assertEquals(DEFAULT_URL, streamFromMigratedDatabase.url)
|
||||||
|
assertEquals(DEFAULT_TITLE, streamFromMigratedDatabase.title)
|
||||||
|
assertEquals(DEFAULT_TYPE, streamFromMigratedDatabase.streamType)
|
||||||
|
assertEquals(DEFAULT_DURATION, streamFromMigratedDatabase.duration)
|
||||||
|
assertEquals(DEFAULT_UPLOADER_NAME, streamFromMigratedDatabase.uploader)
|
||||||
|
assertEquals(DEFAULT_THUMBNAIL, streamFromMigratedDatabase.thumbnailUrl)
|
||||||
|
assertNull(streamFromMigratedDatabase.viewCount)
|
||||||
|
assertNull(streamFromMigratedDatabase.textualUploadDate)
|
||||||
|
assertNull(streamFromMigratedDatabase.uploadDate)
|
||||||
|
assertNull(streamFromMigratedDatabase.isUploadDateApproximation)
|
||||||
|
|
||||||
|
val secondStreamFromMigratedDatabase = listFromDB[1]
|
||||||
|
assertEquals(DEFAULT_SECOND_SERVICE_ID, secondStreamFromMigratedDatabase.serviceId)
|
||||||
|
assertEquals(DEFAULT_SECOND_URL, secondStreamFromMigratedDatabase.url)
|
||||||
|
assertEquals("", secondStreamFromMigratedDatabase.title)
|
||||||
|
// Should fallback to VIDEO_STREAM
|
||||||
|
assertEquals(StreamType.VIDEO_STREAM, secondStreamFromMigratedDatabase.streamType)
|
||||||
|
assertEquals(0, secondStreamFromMigratedDatabase.duration)
|
||||||
|
assertEquals("", secondStreamFromMigratedDatabase.uploader)
|
||||||
|
assertEquals("", secondStreamFromMigratedDatabase.thumbnailUrl)
|
||||||
|
assertNull(secondStreamFromMigratedDatabase.viewCount)
|
||||||
|
assertNull(secondStreamFromMigratedDatabase.textualUploadDate)
|
||||||
|
assertNull(secondStreamFromMigratedDatabase.uploadDate)
|
||||||
|
assertNull(secondStreamFromMigratedDatabase.isUploadDateApproximation)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun getMigratedDatabase(): AppDatabase {
|
||||||
|
val database: AppDatabase = Room.databaseBuilder(ApplicationProvider.getApplicationContext(),
|
||||||
|
AppDatabase::class.java, AppDatabase.DATABASE_NAME)
|
||||||
|
.build()
|
||||||
|
testHelper.closeWhenFinished(database)
|
||||||
|
return database
|
||||||
|
}
|
||||||
|
}
|
@@ -1,8 +1,9 @@
|
|||||||
package org.schabi.newpipe.report;
|
package org.schabi.newpipe.report;
|
||||||
|
|
||||||
import android.os.Parcel;
|
import android.os.Parcel;
|
||||||
import android.support.test.filters.LargeTest;
|
|
||||||
import android.support.test.runner.AndroidJUnit4;
|
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||||
|
import androidx.test.filters.LargeTest;
|
||||||
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
@@ -12,15 +13,16 @@ import org.schabi.newpipe.report.ErrorActivity.ErrorInfo;
|
|||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Instrumented tests for {@link ErrorInfo}
|
* Instrumented tests for {@link ErrorInfo}.
|
||||||
*/
|
*/
|
||||||
@RunWith(AndroidJUnit4.class)
|
@RunWith(AndroidJUnit4.class)
|
||||||
@LargeTest
|
@LargeTest
|
||||||
public class ErrorInfoTest {
|
public class ErrorInfoTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void errorInfo_testParcelable() {
|
public void errorInfoTestParcelable() {
|
||||||
ErrorInfo info = ErrorInfo.make(UserAction.USER_REPORT, "youtube", "request", R.string.general_error);
|
ErrorInfo info = ErrorInfo.make(UserAction.USER_REPORT, "youtube", "request",
|
||||||
|
R.string.general_error);
|
||||||
// Obtain a Parcel object and write the parcelable object to it:
|
// Obtain a Parcel object and write the parcelable object to it:
|
||||||
Parcel parcel = Parcel.obtain();
|
Parcel parcel = Parcel.obtain();
|
||||||
info.writeToParcel(parcel, 0);
|
info.writeToParcel(parcel, 0);
|
||||||
@@ -34,4 +36,4 @@ public class ErrorInfoTest {
|
|||||||
|
|
||||||
parcel.recycle();
|
parcel.recycle();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -6,12 +6,5 @@
|
|||||||
|
|
||||||
<application
|
<application
|
||||||
android:name=".DebugApp"
|
android:name=".DebugApp"
|
||||||
android:label="NewPipe Debug"
|
tools:replace="android:name" />
|
||||||
tools:replace="android:name, android:label">
|
|
||||||
<activity
|
|
||||||
android:name=".MainActivity"
|
|
||||||
android:label="NewPipe Debug"
|
|
||||||
tools:replace="android:label"/>
|
|
||||||
</application>
|
|
||||||
|
|
||||||
</manifest>
|
</manifest>
|
@@ -1,104 +0,0 @@
|
|||||||
package org.schabi.newpipe;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.SharedPreferences;
|
|
||||||
import android.preference.PreferenceManager;
|
|
||||||
import android.support.annotation.NonNull;
|
|
||||||
import android.support.multidex.MultiDex;
|
|
||||||
|
|
||||||
import com.facebook.stetho.Stetho;
|
|
||||||
import com.facebook.stetho.okhttp3.StethoInterceptor;
|
|
||||||
import com.squareup.leakcanary.AndroidHeapDumper;
|
|
||||||
import com.squareup.leakcanary.DefaultLeakDirectoryProvider;
|
|
||||||
import com.squareup.leakcanary.HeapDumper;
|
|
||||||
import com.squareup.leakcanary.LeakCanary;
|
|
||||||
import com.squareup.leakcanary.LeakDirectoryProvider;
|
|
||||||
import com.squareup.leakcanary.RefWatcher;
|
|
||||||
|
|
||||||
import org.schabi.newpipe.extractor.Downloader;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.util.concurrent.TimeUnit;
|
|
||||||
|
|
||||||
import okhttp3.OkHttpClient;
|
|
||||||
|
|
||||||
public class DebugApp extends App {
|
|
||||||
private static final String TAG = DebugApp.class.toString();
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void attachBaseContext(Context base) {
|
|
||||||
super.attachBaseContext(base);
|
|
||||||
MultiDex.install(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onCreate() {
|
|
||||||
super.onCreate();
|
|
||||||
initStetho();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected Downloader getDownloader() {
|
|
||||||
return org.schabi.newpipe.Downloader.init(new OkHttpClient.Builder()
|
|
||||||
.addNetworkInterceptor(new StethoInterceptor()));
|
|
||||||
}
|
|
||||||
|
|
||||||
private void initStetho() {
|
|
||||||
// Create an InitializerBuilder
|
|
||||||
Stetho.InitializerBuilder initializerBuilder =
|
|
||||||
Stetho.newInitializerBuilder(this);
|
|
||||||
|
|
||||||
// Enable Chrome DevTools
|
|
||||||
initializerBuilder.enableWebKitInspector(
|
|
||||||
Stetho.defaultInspectorModulesProvider(this)
|
|
||||||
);
|
|
||||||
|
|
||||||
// Enable command line interface
|
|
||||||
initializerBuilder.enableDumpapp(
|
|
||||||
Stetho.defaultDumperPluginsProvider(getApplicationContext())
|
|
||||||
);
|
|
||||||
|
|
||||||
// Use the InitializerBuilder to generate an Initializer
|
|
||||||
Stetho.Initializer initializer = initializerBuilder.build();
|
|
||||||
|
|
||||||
// Initialize Stetho with the Initializer
|
|
||||||
Stetho.initialize(initializer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected boolean isDisposedRxExceptionsReported() {
|
|
||||||
return PreferenceManager.getDefaultSharedPreferences(this)
|
|
||||||
.getBoolean(getString(R.string.allow_disposed_exceptions_key), false);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected RefWatcher installLeakCanary() {
|
|
||||||
return LeakCanary.refWatcher(this)
|
|
||||||
.heapDumper(new ToggleableHeapDumper(this))
|
|
||||||
// give each object 10 seconds to be gc'ed, before leak canary gets nosy on it
|
|
||||||
.watchDelay(10, TimeUnit.SECONDS)
|
|
||||||
.buildAndInstall();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class ToggleableHeapDumper implements HeapDumper {
|
|
||||||
private final HeapDumper dumper;
|
|
||||||
private final SharedPreferences preferences;
|
|
||||||
private final String dumpingAllowanceKey;
|
|
||||||
|
|
||||||
ToggleableHeapDumper(@NonNull final Context context) {
|
|
||||||
LeakDirectoryProvider leakDirectoryProvider = new DefaultLeakDirectoryProvider(context);
|
|
||||||
this.dumper = new AndroidHeapDumper(context, leakDirectoryProvider);
|
|
||||||
this.preferences = PreferenceManager.getDefaultSharedPreferences(context);
|
|
||||||
this.dumpingAllowanceKey = context.getString(R.string.allow_heap_dumping_key);
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean isDumpingAllowed() {
|
|
||||||
return preferences.getBoolean(dumpingAllowanceKey, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public File dumpHeap() {
|
|
||||||
return isDumpingAllowed() ? dumper.dumpHeap() : HeapDumper.RETRY_LATER;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
59
app/src/debug/java/org/schabi/newpipe/DebugApp.kt
Normal file
59
app/src/debug/java/org/schabi/newpipe/DebugApp.kt
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
package org.schabi.newpipe
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import androidx.multidex.MultiDex
|
||||||
|
import androidx.preference.PreferenceManager
|
||||||
|
import com.facebook.stetho.Stetho
|
||||||
|
import com.facebook.stetho.okhttp3.StethoInterceptor
|
||||||
|
import leakcanary.AppWatcher
|
||||||
|
import leakcanary.LeakCanary
|
||||||
|
import okhttp3.OkHttpClient
|
||||||
|
import org.schabi.newpipe.extractor.downloader.Downloader
|
||||||
|
|
||||||
|
class DebugApp : App() {
|
||||||
|
override fun attachBaseContext(base: Context) {
|
||||||
|
super.attachBaseContext(base)
|
||||||
|
MultiDex.install(this)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onCreate() {
|
||||||
|
super.onCreate()
|
||||||
|
initStetho()
|
||||||
|
|
||||||
|
// Give each object 10 seconds to be GC'ed, before LeakCanary gets nosy on it
|
||||||
|
AppWatcher.config = AppWatcher.config.copy(watchDurationMillis = 10000)
|
||||||
|
LeakCanary.config = LeakCanary.config.copy(dumpHeap = PreferenceManager
|
||||||
|
.getDefaultSharedPreferences(this).getBoolean(getString(
|
||||||
|
R.string.allow_heap_dumping_key), false))
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getDownloader(): Downloader {
|
||||||
|
val downloader = DownloaderImpl.init(OkHttpClient.Builder()
|
||||||
|
.addNetworkInterceptor(StethoInterceptor()))
|
||||||
|
setCookiesToDownloader(downloader)
|
||||||
|
return downloader
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun initStetho() {
|
||||||
|
// Create an InitializerBuilder
|
||||||
|
val initializerBuilder = Stetho.newInitializerBuilder(this)
|
||||||
|
|
||||||
|
// Enable Chrome DevTools
|
||||||
|
initializerBuilder.enableWebKitInspector(Stetho.defaultInspectorModulesProvider(this))
|
||||||
|
|
||||||
|
// Enable command line interface
|
||||||
|
initializerBuilder.enableDumpapp(
|
||||||
|
Stetho.defaultDumperPluginsProvider(applicationContext))
|
||||||
|
|
||||||
|
// Use the InitializerBuilder to generate an Initializer
|
||||||
|
val initializer = initializerBuilder.build()
|
||||||
|
|
||||||
|
// Initialize Stetho with the Initializer
|
||||||
|
Stetho.initialize(initializer)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun isDisposedRxExceptionsReported(): Boolean {
|
||||||
|
return PreferenceManager.getDefaultSharedPreferences(this)
|
||||||
|
.getBoolean(getString(R.string.allow_disposed_exceptions_key), false)
|
||||||
|
}
|
||||||
|
}
|
File diff suppressed because it is too large
Load Diff
@@ -1,116 +0,0 @@
|
|||||||
package android.support.design.widget;
|
|
||||||
|
|
||||||
import android.animation.ValueAnimator;
|
|
||||||
import android.content.Context;
|
|
||||||
import android.support.annotation.NonNull;
|
|
||||||
import android.support.design.animation.AnimationUtils;
|
|
||||||
import android.util.AttributeSet;
|
|
||||||
import android.view.View;
|
|
||||||
|
|
||||||
// check this https://github.com/ToDou/appbarlayout-spring-behavior/blob/master/appbarspring/src/main/java/android/support/design/widget/AppBarFlingFixBehavior.java
|
|
||||||
public final class FlingBehavior extends AppBarLayout.Behavior {
|
|
||||||
|
|
||||||
private ValueAnimator mOffsetAnimator;
|
|
||||||
private static final int MAX_OFFSET_ANIMATION_DURATION = 600; // ms
|
|
||||||
|
|
||||||
public FlingBehavior() {
|
|
||||||
}
|
|
||||||
|
|
||||||
public FlingBehavior(Context context, AttributeSet attrs) {
|
|
||||||
super(context, attrs);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onNestedPreScroll(CoordinatorLayout coordinatorLayout, AppBarLayout child, View target, int dx, int dy, int[] consumed, int type) {
|
|
||||||
if (dy != 0) {
|
|
||||||
int val = child.getBottom();
|
|
||||||
if (val != 0) {
|
|
||||||
int min, max;
|
|
||||||
if (dy < 0) {
|
|
||||||
// We're scrolling down
|
|
||||||
} else {
|
|
||||||
// We're scrolling up
|
|
||||||
if (mOffsetAnimator != null && mOffsetAnimator.isRunning()) {
|
|
||||||
mOffsetAnimator.cancel();
|
|
||||||
}
|
|
||||||
min = -child.getUpNestedPreScrollRange();
|
|
||||||
max = 0;
|
|
||||||
consumed[1] = scroll(coordinatorLayout, child, dy, min, max);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onNestedPreFling(@NonNull CoordinatorLayout coordinatorLayout, @NonNull AppBarLayout child, @NonNull View target, float velocityX, float velocityY) {
|
|
||||||
|
|
||||||
if (velocityY != 0) {
|
|
||||||
if (velocityY < 0) {
|
|
||||||
// We're flinging down
|
|
||||||
int val = child.getBottom();
|
|
||||||
if (val != 0) {
|
|
||||||
final int targetScroll =
|
|
||||||
+child.getDownNestedPreScrollRange();
|
|
||||||
animateOffsetTo(coordinatorLayout, child, targetScroll, velocityY);
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
// We're flinging up
|
|
||||||
int val = child.getBottom();
|
|
||||||
if (val != 0) {
|
|
||||||
final int targetScroll = -child.getUpNestedPreScrollRange();
|
|
||||||
if (getTopBottomOffsetForScrollingSibling() > targetScroll) {
|
|
||||||
animateOffsetTo(coordinatorLayout, child, targetScroll, velocityY);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return super.onNestedPreFling(coordinatorLayout, child, target, velocityX, velocityY);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void animateOffsetTo(final CoordinatorLayout coordinatorLayout,
|
|
||||||
final AppBarLayout child, final int offset, float velocity) {
|
|
||||||
final int distance = Math.abs(getTopBottomOffsetForScrollingSibling() - offset);
|
|
||||||
|
|
||||||
final int duration;
|
|
||||||
velocity = Math.abs(velocity);
|
|
||||||
if (velocity > 0) {
|
|
||||||
duration = 3 * Math.round(1000 * (distance / velocity));
|
|
||||||
} else {
|
|
||||||
final float distanceRatio = (float) distance / child.getHeight();
|
|
||||||
duration = (int) ((distanceRatio + 1) * 150);
|
|
||||||
}
|
|
||||||
|
|
||||||
animateOffsetWithDuration(coordinatorLayout, child, offset, duration);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void animateOffsetWithDuration(final CoordinatorLayout coordinatorLayout,
|
|
||||||
final AppBarLayout child, final int offset, final int duration) {
|
|
||||||
final int currentOffset = getTopBottomOffsetForScrollingSibling();
|
|
||||||
if (currentOffset == offset) {
|
|
||||||
if (mOffsetAnimator != null && mOffsetAnimator.isRunning()) {
|
|
||||||
mOffsetAnimator.cancel();
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mOffsetAnimator == null) {
|
|
||||||
mOffsetAnimator = new ValueAnimator();
|
|
||||||
mOffsetAnimator.setInterpolator(AnimationUtils.DECELERATE_INTERPOLATOR);
|
|
||||||
mOffsetAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
|
|
||||||
@Override
|
|
||||||
public void onAnimationUpdate(ValueAnimator animator) {
|
|
||||||
setHeaderTopBottomOffset(coordinatorLayout, child,
|
|
||||||
(Integer) animator.getAnimatedValue());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
mOffsetAnimator.cancel();
|
|
||||||
}
|
|
||||||
|
|
||||||
mOffsetAnimator.setDuration(Math.min(duration, MAX_OFFSET_ANIMATION_DURATION));
|
|
||||||
mOffsetAnimator.setIntValues(currentOffset, offset);
|
|
||||||
mOffsetAnimator.start();
|
|
||||||
}
|
|
||||||
}
|
|
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,122 @@
|
|||||||
|
package com.google.android.material.appbar;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.graphics.Rect;
|
||||||
|
import android.util.AttributeSet;
|
||||||
|
import android.view.MotionEvent;
|
||||||
|
import android.widget.OverScroller;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
||||||
|
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
|
||||||
|
// See https://stackoverflow.com/questions/56849221#57997489
|
||||||
|
public final class FlingBehavior extends AppBarLayout.Behavior {
|
||||||
|
private final Rect focusScrollRect = new Rect();
|
||||||
|
|
||||||
|
public FlingBehavior(final Context context, final AttributeSet attrs) {
|
||||||
|
super(context, attrs);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onRequestChildRectangleOnScreen(
|
||||||
|
@NonNull final CoordinatorLayout coordinatorLayout, @NonNull final AppBarLayout child,
|
||||||
|
@NonNull final Rect rectangle, final boolean immediate) {
|
||||||
|
|
||||||
|
focusScrollRect.set(rectangle);
|
||||||
|
|
||||||
|
coordinatorLayout.offsetDescendantRectToMyCoords(child, focusScrollRect);
|
||||||
|
|
||||||
|
int height = coordinatorLayout.getHeight();
|
||||||
|
|
||||||
|
if (focusScrollRect.top <= 0 && focusScrollRect.bottom >= height) {
|
||||||
|
// the child is too big to fit inside ourselves completely, ignore request
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
int dy;
|
||||||
|
|
||||||
|
if (focusScrollRect.bottom > height) {
|
||||||
|
dy = focusScrollRect.top;
|
||||||
|
} else if (focusScrollRect.top < 0) {
|
||||||
|
// scrolling up
|
||||||
|
dy = -(height - focusScrollRect.bottom);
|
||||||
|
} else {
|
||||||
|
// nothing to do
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
int consumed = scroll(coordinatorLayout, child, dy, getMaxDragOffset(child), 0);
|
||||||
|
|
||||||
|
return consumed == dy;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean onInterceptTouchEvent(final CoordinatorLayout parent, final AppBarLayout child,
|
||||||
|
final MotionEvent ev) {
|
||||||
|
switch (ev.getActionMasked()) {
|
||||||
|
case MotionEvent.ACTION_DOWN:
|
||||||
|
// remove reference to old nested scrolling child
|
||||||
|
resetNestedScrollingChild();
|
||||||
|
// Stop fling when your finger touches the screen
|
||||||
|
stopAppBarLayoutFling();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return super.onInterceptTouchEvent(parent, child, ev);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
private OverScroller getScrollerField() {
|
||||||
|
try {
|
||||||
|
Class<?> headerBehaviorType = this.getClass()
|
||||||
|
.getSuperclass().getSuperclass().getSuperclass();
|
||||||
|
if (headerBehaviorType != null) {
|
||||||
|
Field field = headerBehaviorType.getDeclaredField("scroller");
|
||||||
|
field.setAccessible(true);
|
||||||
|
return ((OverScroller) field.get(this));
|
||||||
|
}
|
||||||
|
} catch (NoSuchFieldException | IllegalAccessException e) {
|
||||||
|
// ?
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
private Field getLastNestedScrollingChildRefField() {
|
||||||
|
try {
|
||||||
|
Class<?> headerBehaviorType = this.getClass().getSuperclass().getSuperclass();
|
||||||
|
if (headerBehaviorType != null) {
|
||||||
|
Field field = headerBehaviorType.getDeclaredField("lastNestedScrollingChildRef");
|
||||||
|
field.setAccessible(true);
|
||||||
|
return field;
|
||||||
|
}
|
||||||
|
} catch (NoSuchFieldException e) {
|
||||||
|
// ?
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void resetNestedScrollingChild() {
|
||||||
|
Field field = getLastNestedScrollingChildRefField();
|
||||||
|
if (field != null) {
|
||||||
|
try {
|
||||||
|
Object value = field.get(this);
|
||||||
|
if (value != null) {
|
||||||
|
field.set(this, null);
|
||||||
|
}
|
||||||
|
} catch (IllegalAccessException e) {
|
||||||
|
// ?
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void stopAppBarLayoutFling() {
|
||||||
|
OverScroller scroller = getScrollerField();
|
||||||
|
if (scroller != null) {
|
||||||
|
scroller.forceFinished(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -23,17 +23,25 @@ package org.schabi.newpipe;
|
|||||||
/**
|
/**
|
||||||
* Singleton:
|
* Singleton:
|
||||||
* Used to send data between certain Activity/Services within the same process.
|
* Used to send data between certain Activity/Services within the same process.
|
||||||
* This can be considered as an ugly hack inside the Android universe. **/
|
* This can be considered as an ugly hack inside the Android universe.
|
||||||
|
**/
|
||||||
public class ActivityCommunicator {
|
public class ActivityCommunicator {
|
||||||
|
|
||||||
private static ActivityCommunicator activityCommunicator;
|
private static ActivityCommunicator activityCommunicator;
|
||||||
|
private volatile Class returnActivity;
|
||||||
|
|
||||||
public static ActivityCommunicator getCommunicator() {
|
public static ActivityCommunicator getCommunicator() {
|
||||||
if(activityCommunicator == null) {
|
if (activityCommunicator == null) {
|
||||||
activityCommunicator = new ActivityCommunicator();
|
activityCommunicator = new ActivityCommunicator();
|
||||||
}
|
}
|
||||||
return activityCommunicator;
|
return activityCommunicator;
|
||||||
}
|
}
|
||||||
|
|
||||||
public volatile Class returnActivity;
|
public Class getReturnActivity() {
|
||||||
|
return returnActivity;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setReturnActivity(final Class returnActivity) {
|
||||||
|
this.returnActivity = returnActivity;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -5,30 +5,30 @@ import android.app.Application;
|
|||||||
import android.app.NotificationChannel;
|
import android.app.NotificationChannel;
|
||||||
import android.app.NotificationManager;
|
import android.app.NotificationManager;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.content.SharedPreferences;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.preference.PreferenceManager;
|
|
||||||
import android.support.annotation.Nullable;
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
|
import androidx.preference.PreferenceManager;
|
||||||
|
|
||||||
import com.nostra13.universalimageloader.cache.memory.impl.LRULimitedMemoryCache;
|
import com.nostra13.universalimageloader.cache.memory.impl.LRULimitedMemoryCache;
|
||||||
import com.nostra13.universalimageloader.core.ImageLoader;
|
import com.nostra13.universalimageloader.core.ImageLoader;
|
||||||
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
|
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
|
||||||
import com.squareup.leakcanary.LeakCanary;
|
|
||||||
import com.squareup.leakcanary.RefWatcher;
|
|
||||||
|
|
||||||
import org.acra.ACRA;
|
import org.acra.ACRA;
|
||||||
import org.acra.config.ACRAConfiguration;
|
|
||||||
import org.acra.config.ACRAConfigurationException;
|
import org.acra.config.ACRAConfigurationException;
|
||||||
import org.acra.config.ConfigurationBuilder;
|
import org.acra.config.CoreConfiguration;
|
||||||
|
import org.acra.config.CoreConfigurationBuilder;
|
||||||
import org.acra.sender.ReportSenderFactory;
|
import org.acra.sender.ReportSenderFactory;
|
||||||
import org.schabi.newpipe.extractor.Downloader;
|
|
||||||
import org.schabi.newpipe.extractor.NewPipe;
|
import org.schabi.newpipe.extractor.NewPipe;
|
||||||
import org.schabi.newpipe.extractor.utils.Localization;
|
import org.schabi.newpipe.extractor.downloader.Downloader;
|
||||||
import org.schabi.newpipe.report.AcraReportSenderFactory;
|
import org.schabi.newpipe.report.AcraReportSenderFactory;
|
||||||
import org.schabi.newpipe.report.ErrorActivity;
|
import org.schabi.newpipe.report.ErrorActivity;
|
||||||
import org.schabi.newpipe.report.UserAction;
|
import org.schabi.newpipe.report.UserAction;
|
||||||
import org.schabi.newpipe.settings.SettingsActivity;
|
import org.schabi.newpipe.settings.SettingsActivity;
|
||||||
import org.schabi.newpipe.util.ExtractorHelper;
|
import org.schabi.newpipe.util.ExceptionUtils;
|
||||||
|
import org.schabi.newpipe.util.Localization;
|
||||||
|
import org.schabi.newpipe.util.ServiceHelper;
|
||||||
import org.schabi.newpipe.util.StateSaver;
|
import org.schabi.newpipe.util.StateSaver;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@@ -65,15 +65,17 @@ import io.reactivex.plugins.RxJavaPlugins;
|
|||||||
|
|
||||||
public class App extends Application {
|
public class App extends Application {
|
||||||
protected static final String TAG = App.class.toString();
|
protected static final String TAG = App.class.toString();
|
||||||
private RefWatcher refWatcher;
|
|
||||||
private static App app;
|
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
private static final Class<? extends ReportSenderFactory>[]
|
private static final Class<? extends ReportSenderFactory>[]
|
||||||
reportSenderFactoryClasses = new Class[]{AcraReportSenderFactory.class};
|
REPORT_SENDER_FACTORY_CLASSES = new Class[]{AcraReportSenderFactory.class};
|
||||||
|
private static App app;
|
||||||
|
|
||||||
|
public static App getApp() {
|
||||||
|
return app;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void attachBaseContext(Context base) {
|
protected void attachBaseContext(final Context base) {
|
||||||
super.attachBaseContext(base);
|
super.attachBaseContext(base);
|
||||||
|
|
||||||
initACRA();
|
initACRA();
|
||||||
@@ -83,23 +85,21 @@ public class App extends Application {
|
|||||||
public void onCreate() {
|
public void onCreate() {
|
||||||
super.onCreate();
|
super.onCreate();
|
||||||
|
|
||||||
if (LeakCanary.isInAnalyzerProcess(this)) {
|
|
||||||
// This process is dedicated to LeakCanary for heap analysis.
|
|
||||||
// You should not init your app in this process.
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
refWatcher = installLeakCanary();
|
|
||||||
|
|
||||||
app = this;
|
app = this;
|
||||||
|
|
||||||
// Initialize settings first because others inits can use its values
|
// Initialize settings first because others inits can use its values
|
||||||
SettingsActivity.initSettings(this);
|
SettingsActivity.initSettings(this);
|
||||||
|
|
||||||
NewPipe.init(getDownloader(),
|
NewPipe.init(getDownloader(),
|
||||||
org.schabi.newpipe.util.Localization.getPreferredExtractorLocal(this));
|
Localization.getPreferredLocalization(this),
|
||||||
|
Localization.getPreferredContentCountry(this));
|
||||||
|
Localization.init(getApplicationContext());
|
||||||
|
|
||||||
StateSaver.init(this);
|
StateSaver.init(this);
|
||||||
initNotificationChannel();
|
initNotificationChannel();
|
||||||
|
|
||||||
|
ServiceHelper.initServices(this);
|
||||||
|
|
||||||
// Initialize image loader
|
// Initialize image loader
|
||||||
ImageLoader.getInstance().init(getImageLoaderConfigurations(10, 50));
|
ImageLoader.getInstance().init(getImageLoaderConfigurations(10, 50));
|
||||||
|
|
||||||
@@ -110,31 +110,47 @@ public class App extends Application {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected Downloader getDownloader() {
|
protected Downloader getDownloader() {
|
||||||
return org.schabi.newpipe.Downloader.init(null);
|
DownloaderImpl downloader = DownloaderImpl.init(null);
|
||||||
|
setCookiesToDownloader(downloader);
|
||||||
|
return downloader;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void setCookiesToDownloader(final DownloaderImpl downloader) {
|
||||||
|
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(
|
||||||
|
getApplicationContext());
|
||||||
|
final String key = getApplicationContext().getString(R.string.recaptcha_cookies_key);
|
||||||
|
downloader.setCookie(ReCaptchaActivity.RECAPTCHA_COOKIES_KEY, prefs.getString(key, ""));
|
||||||
|
downloader.updateYoutubeRestrictedModeCookies(getApplicationContext());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void configureRxJavaErrorHandler() {
|
private void configureRxJavaErrorHandler() {
|
||||||
// https://github.com/ReactiveX/RxJava/wiki/What's-different-in-2.0#error-handling
|
// https://github.com/ReactiveX/RxJava/wiki/What's-different-in-2.0#error-handling
|
||||||
RxJavaPlugins.setErrorHandler(new Consumer<Throwable>() {
|
RxJavaPlugins.setErrorHandler(new Consumer<Throwable>() {
|
||||||
@Override
|
@Override
|
||||||
public void accept(@NonNull Throwable throwable) {
|
public void accept(@NonNull final Throwable throwable) {
|
||||||
Log.e(TAG, "RxJavaPlugins.ErrorHandler called with -> : " +
|
Log.e(TAG, "RxJavaPlugins.ErrorHandler called with -> : "
|
||||||
"throwable = [" + throwable.getClass().getName() + "]");
|
+ "throwable = [" + throwable.getClass().getName() + "]");
|
||||||
|
|
||||||
|
final Throwable actualThrowable;
|
||||||
if (throwable instanceof UndeliverableException) {
|
if (throwable instanceof UndeliverableException) {
|
||||||
// As UndeliverableException is a wrapper, get the cause of it to get the "real" exception
|
// As UndeliverableException is a wrapper,
|
||||||
throwable = throwable.getCause();
|
// get the cause of it to get the "real" exception
|
||||||
|
actualThrowable = throwable.getCause();
|
||||||
|
} else {
|
||||||
|
actualThrowable = throwable;
|
||||||
}
|
}
|
||||||
|
|
||||||
final List<Throwable> errors;
|
final List<Throwable> errors;
|
||||||
if (throwable instanceof CompositeException) {
|
if (actualThrowable instanceof CompositeException) {
|
||||||
errors = ((CompositeException) throwable).getExceptions();
|
errors = ((CompositeException) actualThrowable).getExceptions();
|
||||||
} else {
|
} else {
|
||||||
errors = Collections.singletonList(throwable);
|
errors = Collections.singletonList(actualThrowable);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (final Throwable error : errors) {
|
for (final Throwable error : errors) {
|
||||||
if (isThrowableIgnored(error)) return;
|
if (isThrowableIgnored(error)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (isThrowableCritical(error)) {
|
if (isThrowableCritical(error)) {
|
||||||
reportException(error);
|
reportException(error);
|
||||||
return;
|
return;
|
||||||
@@ -144,22 +160,24 @@ public class App extends Application {
|
|||||||
// Out-of-lifecycle exceptions should only be reported if a debug user wishes so,
|
// Out-of-lifecycle exceptions should only be reported if a debug user wishes so,
|
||||||
// When exception is not reported, log it
|
// When exception is not reported, log it
|
||||||
if (isDisposedRxExceptionsReported()) {
|
if (isDisposedRxExceptionsReported()) {
|
||||||
reportException(throwable);
|
reportException(actualThrowable);
|
||||||
} else {
|
} else {
|
||||||
Log.e(TAG, "RxJavaPlugin: Undeliverable Exception received: ", throwable);
|
Log.e(TAG, "RxJavaPlugin: Undeliverable Exception received: ", actualThrowable);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isThrowableIgnored(@NonNull final Throwable throwable) {
|
private boolean isThrowableIgnored(@NonNull final Throwable throwable) {
|
||||||
// Don't crash the application over a simple network problem
|
// Don't crash the application over a simple network problem
|
||||||
return ExtractorHelper.hasAssignableCauseThrowable(throwable,
|
return ExceptionUtils.hasAssignableCause(throwable,
|
||||||
IOException.class, SocketException.class, // network api cancellation
|
// network api cancellation
|
||||||
InterruptedException.class, InterruptedIOException.class); // blocking code disposed
|
IOException.class, SocketException.class,
|
||||||
|
// blocking code disposed
|
||||||
|
InterruptedException.class, InterruptedIOException.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isThrowableCritical(@NonNull final Throwable throwable) {
|
private boolean isThrowableCritical(@NonNull final Throwable throwable) {
|
||||||
// Though these exceptions cannot be ignored
|
// Though these exceptions cannot be ignored
|
||||||
return ExtractorHelper.hasAssignableCauseThrowable(throwable,
|
return ExceptionUtils.hasAssignableCause(throwable,
|
||||||
NullPointerException.class, IllegalArgumentException.class, // bug in app
|
NullPointerException.class, IllegalArgumentException.class, // bug in app
|
||||||
OnErrorNotImplementedException.class, MissingBackpressureException.class,
|
OnErrorNotImplementedException.class, MissingBackpressureException.class,
|
||||||
IllegalStateException.class); // bug in operator
|
IllegalStateException.class); // bug in operator
|
||||||
@@ -184,8 +202,8 @@ public class App extends Application {
|
|||||||
|
|
||||||
private void initACRA() {
|
private void initACRA() {
|
||||||
try {
|
try {
|
||||||
final ACRAConfiguration acraConfig = new ConfigurationBuilder(this)
|
final CoreConfiguration acraConfig = new CoreConfigurationBuilder(this)
|
||||||
.setReportSenderFactoryClasses(reportSenderFactoryClasses)
|
.setReportSenderFactoryClasses(REPORT_SENDER_FACTORY_CLASSES)
|
||||||
.setBuildConfigClass(BuildConfig.class)
|
.setBuildConfigClass(BuildConfig.class)
|
||||||
.build();
|
.build();
|
||||||
ACRA.init(this, acraConfig);
|
ACRA.init(this, acraConfig);
|
||||||
@@ -196,7 +214,7 @@ public class App extends Application {
|
|||||||
null,
|
null,
|
||||||
null,
|
null,
|
||||||
ErrorActivity.ErrorInfo.make(UserAction.SOMETHING_ELSE, "none",
|
ErrorActivity.ErrorInfo.make(UserAction.SOMETHING_ELSE, "none",
|
||||||
"Could not initialize ACRA crash report", R.string.app_ui_crash));
|
"Could not initialize ACRA crash report", R.string.app_ui_crash));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -224,11 +242,11 @@ public class App extends Application {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Set up notification channel for app update.
|
* Set up notification channel for app update.
|
||||||
|
*
|
||||||
* @param importance
|
* @param importance
|
||||||
*/
|
*/
|
||||||
@TargetApi(Build.VERSION_CODES.O)
|
@TargetApi(Build.VERSION_CODES.O)
|
||||||
private void setUpUpdateNotificationChannel(int importance) {
|
private void setUpUpdateNotificationChannel(final int importance) {
|
||||||
|
|
||||||
final String appUpdateId
|
final String appUpdateId
|
||||||
= getString(R.string.app_update_notification_channel_id);
|
= getString(R.string.app_update_notification_channel_id);
|
||||||
final CharSequence appUpdateName
|
final CharSequence appUpdateName
|
||||||
@@ -245,21 +263,7 @@ public class App extends Application {
|
|||||||
appUpdateNotificationManager.createNotificationChannel(appUpdateChannel);
|
appUpdateNotificationManager.createNotificationChannel(appUpdateChannel);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
|
||||||
public static RefWatcher getRefWatcher(Context context) {
|
|
||||||
final App application = (App) context.getApplicationContext();
|
|
||||||
return application.refWatcher;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected RefWatcher installLeakCanary() {
|
|
||||||
return RefWatcher.DISABLED;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected boolean isDisposedRxExceptionsReported() {
|
protected boolean isDisposedRxExceptionsReported() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static App getApp() {
|
|
||||||
return app;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@@ -2,32 +2,31 @@ package org.schabi.newpipe;
|
|||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.annotation.NonNull;
|
|
||||||
import android.support.v4.app.Fragment;
|
|
||||||
import android.support.v4.app.FragmentManager;
|
|
||||||
import android.support.v7.app.AppCompatActivity;
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
|
import androidx.fragment.app.Fragment;
|
||||||
|
import androidx.fragment.app.FragmentManager;
|
||||||
|
|
||||||
import com.nostra13.universalimageloader.core.ImageLoader;
|
import com.nostra13.universalimageloader.core.ImageLoader;
|
||||||
import com.squareup.leakcanary.RefWatcher;
|
|
||||||
|
|
||||||
import icepick.Icepick;
|
import icepick.Icepick;
|
||||||
import icepick.State;
|
import icepick.State;
|
||||||
|
import leakcanary.AppWatcher;
|
||||||
|
|
||||||
public abstract class BaseFragment extends Fragment {
|
public abstract class BaseFragment extends Fragment {
|
||||||
|
public static final ImageLoader IMAGE_LOADER = ImageLoader.getInstance();
|
||||||
protected final String TAG = getClass().getSimpleName() + "@" + Integer.toHexString(hashCode());
|
protected final String TAG = getClass().getSimpleName() + "@" + Integer.toHexString(hashCode());
|
||||||
protected final boolean DEBUG = MainActivity.DEBUG;
|
protected final boolean DEBUG = MainActivity.DEBUG;
|
||||||
|
|
||||||
protected AppCompatActivity activity;
|
protected AppCompatActivity activity;
|
||||||
public static final ImageLoader imageLoader = ImageLoader.getInstance();
|
//These values are used for controlling fragments when they are part of the frontpage
|
||||||
|
|
||||||
//These values are used for controlling framgents when they are part of the frontpage
|
|
||||||
@State
|
@State
|
||||||
protected boolean useAsFrontPage = false;
|
protected boolean useAsFrontPage = false;
|
||||||
protected boolean mIsVisibleToUser = false;
|
private boolean mIsVisibleToUser = false;
|
||||||
|
|
||||||
public void useAsFrontPage(boolean value) {
|
public void useAsFrontPage(final boolean value) {
|
||||||
useAsFrontPage = value;
|
useAsFrontPage = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -36,7 +35,7 @@ public abstract class BaseFragment extends Fragment {
|
|||||||
//////////////////////////////////////////////////////////////////////////*/
|
//////////////////////////////////////////////////////////////////////////*/
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onAttach(Context context) {
|
public void onAttach(final Context context) {
|
||||||
super.onAttach(context);
|
super.onAttach(context);
|
||||||
activity = (AppCompatActivity) context;
|
activity = (AppCompatActivity) context;
|
||||||
}
|
}
|
||||||
@@ -48,43 +47,49 @@ public abstract class BaseFragment extends Fragment {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(final Bundle savedInstanceState) {
|
||||||
if (DEBUG) Log.d(TAG, "onCreate() called with: savedInstanceState = [" + savedInstanceState + "]");
|
if (DEBUG) {
|
||||||
|
Log.d(TAG, "onCreate() called with: "
|
||||||
|
+ "savedInstanceState = [" + savedInstanceState + "]");
|
||||||
|
}
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
Icepick.restoreInstanceState(this, savedInstanceState);
|
Icepick.restoreInstanceState(this, savedInstanceState);
|
||||||
if (savedInstanceState != null) onRestoreInstanceState(savedInstanceState);
|
if (savedInstanceState != null) {
|
||||||
|
onRestoreInstanceState(savedInstanceState);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onViewCreated(View rootView, Bundle savedInstanceState) {
|
public void onViewCreated(final View rootView, final Bundle savedInstanceState) {
|
||||||
super.onViewCreated(rootView, savedInstanceState);
|
super.onViewCreated(rootView, savedInstanceState);
|
||||||
if (DEBUG) {
|
if (DEBUG) {
|
||||||
Log.d(TAG, "onViewCreated() called with: rootView = [" + rootView + "], savedInstanceState = [" + savedInstanceState + "]");
|
Log.d(TAG, "onViewCreated() called with: "
|
||||||
|
+ "rootView = [" + rootView + "], "
|
||||||
|
+ "savedInstanceState = [" + savedInstanceState + "]");
|
||||||
}
|
}
|
||||||
initViews(rootView, savedInstanceState);
|
initViews(rootView, savedInstanceState);
|
||||||
initListeners();
|
initListeners();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onSaveInstanceState(Bundle outState) {
|
public void onSaveInstanceState(final Bundle outState) {
|
||||||
super.onSaveInstanceState(outState);
|
super.onSaveInstanceState(outState);
|
||||||
Icepick.saveInstanceState(this, outState);
|
Icepick.saveInstanceState(this, outState);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
|
protected void onRestoreInstanceState(@NonNull final Bundle savedInstanceState) {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDestroy() {
|
public void onDestroy() {
|
||||||
super.onDestroy();
|
super.onDestroy();
|
||||||
|
|
||||||
RefWatcher refWatcher = App.getRefWatcher(getActivity());
|
AppWatcher.INSTANCE.getObjectWatcher().watch(this);
|
||||||
if (refWatcher != null) refWatcher.watch(this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setUserVisibleHint(boolean isVisibleToUser) {
|
public void setUserVisibleHint(final boolean isVisibleToUser) {
|
||||||
super.setUserVisibleHint(isVisibleToUser);
|
super.setUserVisibleHint(isVisibleToUser);
|
||||||
mIsVisibleToUser = isVisibleToUser;
|
mIsVisibleToUser = isVisibleToUser;
|
||||||
}
|
}
|
||||||
@@ -93,7 +98,7 @@ public abstract class BaseFragment extends Fragment {
|
|||||||
// Init
|
// Init
|
||||||
//////////////////////////////////////////////////////////////////////////*/
|
//////////////////////////////////////////////////////////////////////////*/
|
||||||
|
|
||||||
protected void initViews(View rootView, Bundle savedInstanceState) {
|
protected void initViews(final View rootView, final Bundle savedInstanceState) {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void initListeners() {
|
protected void initListeners() {
|
||||||
@@ -103,10 +108,13 @@ public abstract class BaseFragment extends Fragment {
|
|||||||
// Utils
|
// Utils
|
||||||
//////////////////////////////////////////////////////////////////////////*/
|
//////////////////////////////////////////////////////////////////////////*/
|
||||||
|
|
||||||
public void setTitle(String title) {
|
public void setTitle(final String title) {
|
||||||
if (DEBUG) Log.d(TAG, "setTitle() called with: title = [" + title + "]");
|
if (DEBUG) {
|
||||||
if((!useAsFrontPage || mIsVisibleToUser)
|
Log.d(TAG, "setTitle() called with: title = [" + title + "]");
|
||||||
&& (activity != null && activity.getSupportActionBar() != null)) {
|
}
|
||||||
|
if ((!useAsFrontPage || mIsVisibleToUser)
|
||||||
|
&& (activity != null && activity.getSupportActionBar() != null)) {
|
||||||
|
activity.getSupportActionBar().setDisplayShowTitleEnabled(true);
|
||||||
activity.getSupportActionBar().setTitle(title);
|
activity.getSupportActionBar().setTitle(title);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
282
app/src/main/java/org/schabi/newpipe/DownloaderImpl.java
Normal file
282
app/src/main/java/org/schabi/newpipe/DownloaderImpl.java
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
package org.schabi.newpipe;
|
package org.schabi.newpipe;
|
||||||
|
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
@@ -27,9 +26,20 @@ import android.os.Bundle;
|
|||||||
|
|
||||||
public class ExitActivity extends Activity {
|
public class ExitActivity extends Activity {
|
||||||
|
|
||||||
|
public static void exitAndRemoveFromRecentApps(final Activity activity) {
|
||||||
|
Intent intent = new Intent(activity, ExitActivity.class);
|
||||||
|
|
||||||
|
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
|
||||||
|
| Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
|
||||||
|
| Intent.FLAG_ACTIVITY_CLEAR_TASK
|
||||||
|
| Intent.FLAG_ACTIVITY_NO_ANIMATION);
|
||||||
|
|
||||||
|
activity.startActivity(intent);
|
||||||
|
}
|
||||||
|
|
||||||
@SuppressLint("NewApi")
|
@SuppressLint("NewApi")
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(final Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
if (Build.VERSION.SDK_INT >= 21) {
|
if (Build.VERSION.SDK_INT >= 21) {
|
||||||
@@ -40,15 +50,4 @@ public class ExitActivity extends Activity {
|
|||||||
|
|
||||||
System.exit(0);
|
System.exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void exitAndRemoveFromRecentApps(Activity activity) {
|
|
||||||
Intent intent = new Intent(activity, ExitActivity.class);
|
|
||||||
|
|
||||||
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
|
|
||||||
| Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
|
|
||||||
| Intent.FLAG_ACTIVITY_CLEAR_TASK
|
|
||||||
| Intent.FLAG_ACTIVITY_NO_ANIMATION);
|
|
||||||
|
|
||||||
activity.startActivity(intent);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@@ -18,7 +18,7 @@ public class ImageDownloader extends BaseImageDownloader {
|
|||||||
private final SharedPreferences preferences;
|
private final SharedPreferences preferences;
|
||||||
private final String downloadThumbnailKey;
|
private final String downloadThumbnailKey;
|
||||||
|
|
||||||
public ImageDownloader(Context context) {
|
public ImageDownloader(final Context context) {
|
||||||
super(context);
|
super(context);
|
||||||
this.resources = context.getResources();
|
this.resources = context.getResources();
|
||||||
this.preferences = PreferenceManager.getDefaultSharedPreferences(context);
|
this.preferences = PreferenceManager.getDefaultSharedPreferences(context);
|
||||||
@@ -31,7 +31,7 @@ public class ImageDownloader extends BaseImageDownloader {
|
|||||||
|
|
||||||
@SuppressLint("ResourceType")
|
@SuppressLint("ResourceType")
|
||||||
@Override
|
@Override
|
||||||
public InputStream getStream(String imageUri, Object extra) throws IOException {
|
public InputStream getStream(final String imageUri, final Object extra) throws IOException {
|
||||||
if (isDownloadingThumbnail()) {
|
if (isDownloadingThumbnail()) {
|
||||||
return super.getStream(imageUri, extra);
|
return super.getStream(imageUri, extra);
|
||||||
} else {
|
} else {
|
||||||
@@ -39,8 +39,9 @@ public class ImageDownloader extends BaseImageDownloader {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected InputStream getStreamFromNetwork(String imageUri, Object extra) throws IOException {
|
protected InputStream getStreamFromNetwork(final String imageUri, final Object extra)
|
||||||
final Downloader downloader = (Downloader) NewPipe.getDownloader();
|
throws IOException {
|
||||||
|
final DownloaderImpl downloader = (DownloaderImpl) NewPipe.getDownloader();
|
||||||
return downloader.stream(imageUri);
|
return downloader.stream(imageUri);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user