mirror of
https://github.com/TeamNewPipe/NewPipe
synced 2025-09-19 23:40:51 +02:00
Compare commits
2332 Commits
v0.7.0
...
v0.12.0-be
Author | SHA1 | Date | |
---|---|---|---|
![]() |
72a9940863 | ||
![]() |
46e088b5f3 | ||
![]() |
a3468b51e2 | ||
![]() |
34f19c4268 | ||
![]() |
1d2c616ce0 | ||
![]() |
99e0f0c3e4 | ||
![]() |
1a92dfb019 | ||
![]() |
cc7f27fb53 | ||
![]() |
e8402008bc | ||
![]() |
c1a302834c | ||
![]() |
762f374f93 | ||
![]() |
e21d2bd511 | ||
![]() |
d936ca6b89 | ||
![]() |
88ac821070 | ||
![]() |
c20837d5f5 | ||
![]() |
81a4c66f92 | ||
![]() |
e4dfb02cb0 | ||
![]() |
0abaab4880 | ||
![]() |
a1aaa52c2a | ||
![]() |
b3a509ad14 | ||
![]() |
ad0f58090f | ||
![]() |
43c4e619c2 | ||
![]() |
427397ba7b | ||
![]() |
b51abf1ea6 | ||
![]() |
76e082159d | ||
![]() |
d36c371c1d | ||
![]() |
a5b2100f8a | ||
![]() |
fe19780f06 | ||
![]() |
83f1d7af82 | ||
![]() |
1916616b07 | ||
![]() |
0a6a684acc | ||
![]() |
6d9aecd500 | ||
![]() |
4d25db2e11 | ||
![]() |
77d5714059 | ||
![]() |
76c59cbdea | ||
![]() |
212f7dfc93 | ||
![]() |
9ba37ce34c | ||
![]() |
6c439bfbc4 | ||
![]() |
352d0db08b | ||
![]() |
be8ce1fce5 | ||
![]() |
f6356e576a | ||
![]() |
83a34a8ba1 | ||
![]() |
fb7a855eda | ||
![]() |
9c1d778623 | ||
![]() |
1bad2a023d | ||
![]() |
999da51e99 | ||
![]() |
ea4b965eeb | ||
![]() |
33160e83cb | ||
![]() |
3e5e7f49cc | ||
![]() |
cc02b01c2b | ||
![]() |
243e5391db | ||
![]() |
230ad5c04f | ||
![]() |
289cfaa407 | ||
![]() |
0798745c16 | ||
![]() |
094695a7ff | ||
![]() |
86f041b803 | ||
![]() |
00e65153f4 | ||
![]() |
b12f0490f3 | ||
![]() |
42a2bc8a9a | ||
![]() |
8adca3725d | ||
![]() |
b57d4b3048 | ||
![]() |
9c7aa241e4 | ||
![]() |
c3ec9b2ad7 | ||
![]() |
195070f8f5 | ||
![]() |
cbfe91f36f | ||
![]() |
738e2ac344 | ||
![]() |
ba0be665ae | ||
![]() |
0ba6f8b39f | ||
![]() |
2773f5fbc8 | ||
![]() |
263a816c3b | ||
![]() |
e7d148336b | ||
![]() |
829059ea01 | ||
![]() |
622d698ff8 | ||
![]() |
f09b04dce0 | ||
![]() |
59f8583895 | ||
![]() |
f506fc0478 | ||
![]() |
880676d670 | ||
![]() |
6485327b97 | ||
![]() |
5773152ed3 | ||
![]() |
e88312659b | ||
![]() |
c4d0ba549f | ||
![]() |
cb41afb11f | ||
![]() |
6d27aea9f2 | ||
![]() |
39e1f9cb76 | ||
![]() |
8fb7d64f79 | ||
![]() |
08fdef4870 | ||
![]() |
aa0196b9d0 | ||
![]() |
a3426f92ac | ||
![]() |
d50d4254c5 | ||
![]() |
50cdadc4a2 | ||
![]() |
5aa9b6cb12 | ||
![]() |
44fc8d80e0 | ||
![]() |
817fa57bfe | ||
![]() |
668e2da01b | ||
![]() |
7f3982d153 | ||
![]() |
f62ae930c7 | ||
![]() |
d0808ce159 | ||
![]() |
7b19dadbf5 | ||
![]() |
43ab0283d9 | ||
![]() |
c27e9d5901 | ||
![]() |
e0d21627bb | ||
![]() |
1b1dd6ef88 | ||
![]() |
10700007d5 | ||
![]() |
c5ec8d04c1 | ||
![]() |
490b250db6 | ||
![]() |
0630423c8e | ||
![]() |
c2e06517e1 | ||
![]() |
b01ae33d1e | ||
![]() |
a55ee32058 | ||
![]() |
c3941d5bec | ||
![]() |
6020dc2b2d | ||
![]() |
7ab41e0c3a | ||
![]() |
c0a75f5b98 | ||
![]() |
efd4db40ef | ||
![]() |
3c3fe7bf83 | ||
![]() |
268762166a | ||
![]() |
53a1833e26 | ||
![]() |
1ff8b5fb9f | ||
![]() |
225b43ca3c | ||
![]() |
75a58d6381 | ||
![]() |
62814f083e | ||
![]() |
6f9deea873 | ||
![]() |
d3160eed9d | ||
![]() |
9b4a07de34 | ||
![]() |
d31eeac49e | ||
![]() |
84c5d27416 | ||
![]() |
17d77aa31f | ||
![]() |
388ec3e3d3 | ||
![]() |
f0829f9ef3 | ||
![]() |
81f481833c | ||
![]() |
a74c4168f3 | ||
![]() |
776dbc34f7 | ||
![]() |
168ac91ab8 | ||
![]() |
9bd26798b6 | ||
![]() |
4ae81a2de4 | ||
![]() |
3c314ced0a | ||
![]() |
ba9d0d7707 | ||
![]() |
38946e4b0f | ||
![]() |
f71242a036 | ||
![]() |
960fd9be38 | ||
![]() |
40844dcd76 | ||
![]() |
420d28c713 | ||
![]() |
5bbd6afaf1 | ||
![]() |
77a06c7604 | ||
![]() |
1f4f87d3bd | ||
![]() |
2e8d86575e | ||
![]() |
ef0659f436 | ||
![]() |
e18e69966f | ||
![]() |
e7b4b88055 | ||
![]() |
de65d1e1fc | ||
![]() |
7ea0862f95 | ||
![]() |
efc7049dfd | ||
![]() |
629549d76f | ||
![]() |
756fb795d6 | ||
![]() |
13d1974a5b | ||
![]() |
d3168a9022 | ||
![]() |
059378eedf | ||
![]() |
e973868a90 | ||
![]() |
2a0e5d6835 | ||
![]() |
5537abe2c3 | ||
![]() |
5eae235b3c | ||
![]() |
bfc7718a21 | ||
![]() |
405d6bee78 | ||
![]() |
f65f2da890 | ||
![]() |
30ab58c33d | ||
![]() |
87ba5a7eb6 | ||
![]() |
6e8593af91 | ||
![]() |
0ab1d3fc40 | ||
![]() |
f22d13e695 | ||
![]() |
cdde61a460 | ||
![]() |
989ce126f1 | ||
![]() |
28618e822e | ||
![]() |
6772381afc | ||
![]() |
75b45beabc | ||
![]() |
56d53e9b01 | ||
![]() |
3a8b04e2d1 | ||
![]() |
1ce7d66fb1 | ||
![]() |
7b5a9b69fe | ||
![]() |
837b22ccac | ||
![]() |
7146719393 | ||
![]() |
71ee604c69 | ||
![]() |
9945a5b813 | ||
![]() |
7254387042 | ||
![]() |
3a7f2a94a6 | ||
![]() |
6bea4aa96b | ||
![]() |
fa262bbceb | ||
![]() |
3139fe0170 | ||
![]() |
ef6c5de65b | ||
![]() |
07799563b5 | ||
![]() |
b1de4b7bd6 | ||
![]() |
2b8ae9a5ea | ||
![]() |
7c52d3ec5d | ||
![]() |
aefaa7619e | ||
![]() |
ca202290bf | ||
![]() |
cbdbc4cba2 | ||
![]() |
8abf904a78 | ||
![]() |
ecf7969c46 | ||
![]() |
a473e3d623 | ||
![]() |
1f8e90858e | ||
![]() |
2c2edca8fa | ||
![]() |
50e86ff1ca | ||
![]() |
02ecc5011a | ||
![]() |
6e666a018b | ||
![]() |
66fbb2ce1e | ||
![]() |
b00722ec0a | ||
![]() |
77b1413319 | ||
![]() |
87b8d60c9d | ||
![]() |
db5203e1ff | ||
![]() |
ea022670c4 | ||
![]() |
54b009cc49 | ||
![]() |
80c3acace9 | ||
![]() |
cea9428b47 | ||
![]() |
f8ffbfabbe | ||
![]() |
836a1e652b | ||
![]() |
d8544e0b84 | ||
![]() |
4817d7fddc | ||
![]() |
e6a385a85e | ||
![]() |
3634f68364 | ||
![]() |
f17ffa94fe | ||
![]() |
d52bcd46a1 | ||
![]() |
7e58b0b6fe | ||
![]() |
f451f1f65d | ||
![]() |
4d12e71fba | ||
![]() |
66fde7a212 | ||
![]() |
86eccf219d | ||
![]() |
677865f347 | ||
![]() |
eb4b3810e9 | ||
![]() |
5f26501ddf | ||
![]() |
b33a72f864 | ||
![]() |
675f43b968 | ||
![]() |
9f117a2e59 | ||
![]() |
a0844229a3 | ||
![]() |
114fcc144c | ||
![]() |
43372ff648 | ||
![]() |
b8ebbc5404 | ||
![]() |
28309f82f3 | ||
![]() |
c70fa391b6 | ||
![]() |
caab589dce | ||
![]() |
20370054e7 | ||
![]() |
f1882cb1e1 | ||
![]() |
2ed149852d | ||
![]() |
ac7226a0df | ||
![]() |
5705650ca8 | ||
![]() |
60855ca7c5 | ||
![]() |
b8d8d181f3 | ||
![]() |
6309160fc6 | ||
![]() |
fc0e6ed273 | ||
![]() |
ada0cee656 | ||
![]() |
6dde524d2c | ||
![]() |
6a631e1915 | ||
![]() |
bb6fa343cf | ||
![]() |
7557acde6c | ||
![]() |
25ed8952f9 | ||
![]() |
b93d94b0bd | ||
![]() |
33d75fd2fb | ||
![]() |
28a9855fd2 | ||
![]() |
9aad07621c | ||
![]() |
384cde6eaa | ||
![]() |
5ae98661ad | ||
![]() |
8f4d9ceca9 | ||
![]() |
83d9a1233e | ||
![]() |
522a287d79 | ||
![]() |
e052d4660d | ||
![]() |
39b0b2f032 | ||
![]() |
0223d6d200 | ||
![]() |
808ce72078 | ||
![]() |
3a84c47176 | ||
![]() |
20c2426128 | ||
![]() |
bf11d4c9fa | ||
![]() |
783c0f79d7 | ||
![]() |
98b94bd9c4 | ||
![]() |
ff0178f965 | ||
![]() |
7f88c3d0a9 | ||
![]() |
11e8e38f2c | ||
![]() |
50c5314eaf | ||
![]() |
a7a76d4f58 | ||
![]() |
4df4f68fe1 | ||
![]() |
7db8d37137 | ||
![]() |
b7503a7d81 | ||
![]() |
9f5d4034e3 | ||
![]() |
3c941f6c4b | ||
![]() |
ec8fff421a | ||
![]() |
a47a0b5432 | ||
![]() |
96ba46f21d | ||
![]() |
90f48d5817 | ||
![]() |
7288dd097a | ||
![]() |
0119d62a35 | ||
![]() |
4d6ab73fa9 | ||
![]() |
f58c95840a | ||
![]() |
ecf24f81ec | ||
![]() |
dd3306a940 | ||
![]() |
bbb2b98f27 | ||
![]() |
bc7332780d | ||
![]() |
6f3bc3ac8f | ||
![]() |
cd04d869b7 | ||
![]() |
909e15cbdd | ||
![]() |
33fa30ab78 | ||
![]() |
44933ac17a | ||
![]() |
bb2af96deb | ||
![]() |
1fe6da14ea | ||
![]() |
b7b9653c21 | ||
![]() |
8adc5918f8 | ||
![]() |
0db593b1bb | ||
![]() |
a0c9dbeb78 | ||
![]() |
61d5546d89 | ||
![]() |
f97b7c943b | ||
![]() |
97549b633b | ||
![]() |
1949e4a9d4 | ||
![]() |
ecb5f7a5ba | ||
![]() |
6021f72cf0 | ||
![]() |
c00ef74f96 | ||
![]() |
962e070150 | ||
![]() |
221cbf5e07 | ||
![]() |
a72d37ab69 | ||
![]() |
f92227e5df | ||
![]() |
c50617452f | ||
![]() |
3957eca94d | ||
![]() |
70111cf614 | ||
![]() |
f9e03c9a40 | ||
![]() |
88fbdf1cc4 | ||
![]() |
7b76bd79e8 | ||
![]() |
f4b58e649d | ||
![]() |
91ff301d53 | ||
![]() |
f5e1c99259 | ||
![]() |
abdcd3cc30 | ||
![]() |
23615a39ac | ||
![]() |
5fa5fc39fc | ||
![]() |
01b3c7e91b | ||
![]() |
e4e364af3f | ||
![]() |
f2358692af | ||
![]() |
26ed6299e3 | ||
![]() |
3a85187111 | ||
![]() |
4261a2eed3 | ||
![]() |
fef17163a9 | ||
![]() |
9dd447a14f | ||
![]() |
ecf4407ba4 | ||
![]() |
039c0d3ee6 | ||
![]() |
5808aead55 | ||
![]() |
e797e2e7f1 | ||
![]() |
23cacbfe65 | ||
![]() |
4f94ee9b72 | ||
![]() |
0d1a26298a | ||
![]() |
8ccd0b23e9 | ||
![]() |
9d8b991354 | ||
![]() |
d273f69852 | ||
![]() |
eee3ccafc3 | ||
![]() |
3686e90e81 | ||
![]() |
f5f8371865 | ||
![]() |
1191455d37 | ||
![]() |
1a5d9da2bf | ||
![]() |
011e151c91 | ||
![]() |
54aa40eac1 | ||
![]() |
21a7a73f6d | ||
![]() |
5090b41eef | ||
![]() |
0e55aa6249 | ||
![]() |
dd2dcf4df2 | ||
![]() |
2e84b28998 | ||
![]() |
e6cbfea5a7 | ||
![]() |
641d662944 | ||
![]() |
09208e183b | ||
![]() |
fba3ece688 | ||
![]() |
f7d849a3cc | ||
![]() |
709c700cc6 | ||
![]() |
2da411c1ec | ||
![]() |
d6e4f3c809 | ||
![]() |
1bb08db8ba | ||
![]() |
2ba116b1e6 | ||
![]() |
7088de0fb9 | ||
![]() |
7084f73d6c | ||
![]() |
69374e25fe | ||
![]() |
5e16969d61 | ||
![]() |
0fe5a44e5a | ||
![]() |
98e617001d | ||
![]() |
979bd09b29 | ||
![]() |
77678b8f31 | ||
![]() |
3575cac9d7 | ||
![]() |
8cdeaf1b27 | ||
![]() |
08a8c6c414 | ||
![]() |
fa5c1b22ae | ||
![]() |
a99e7f3288 | ||
![]() |
a29506ed2f | ||
![]() |
1434b40d03 | ||
![]() |
6d6609187b | ||
![]() |
9682eaae2a | ||
![]() |
1cdb4ccc17 | ||
![]() |
2a878dffbc | ||
![]() |
49f4fb7ed7 | ||
![]() |
caa985660a | ||
![]() |
3842a1e4fb | ||
![]() |
e06d83cb93 | ||
![]() |
67df894448 | ||
![]() |
d1ec6cf21b | ||
![]() |
537c561cee | ||
![]() |
a65ddc5b36 | ||
![]() |
1fb1b3a784 | ||
![]() |
b80879765c | ||
![]() |
10919fe15b | ||
![]() |
9e5fe1edca | ||
![]() |
03ee3f3d2a | ||
![]() |
4113283069 | ||
![]() |
56c5f696df | ||
![]() |
9beb76e641 | ||
![]() |
f71403be58 | ||
![]() |
d0e5d36b1b | ||
![]() |
fdeb7543ca | ||
![]() |
90716f4f5b | ||
![]() |
54d41bc288 | ||
![]() |
d63c7a9042 | ||
![]() |
cd5b60cbed | ||
![]() |
6d60e6698a | ||
![]() |
d53cb01396 | ||
![]() |
8baaecab1b | ||
![]() |
1368f9f89e | ||
![]() |
ce36f3ae3b | ||
![]() |
cf147aa161 | ||
![]() |
7700cff5e5 | ||
![]() |
b883f313ba | ||
![]() |
b1ee22cde6 | ||
![]() |
b32f149a1b | ||
![]() |
1d136c6c35 | ||
![]() |
b8a17580c5 | ||
![]() |
87febf8679 | ||
![]() |
38b2ffd450 | ||
![]() |
01e031e7e7 | ||
![]() |
0b1eda3050 | ||
![]() |
52cdf96dfe | ||
![]() |
1f5eba59c5 | ||
![]() |
372c2f2be0 | ||
![]() |
25e0b46396 | ||
![]() |
621a1909ec | ||
![]() |
d3332583b6 | ||
![]() |
cb5cf9bb09 | ||
![]() |
6cb2c2a84e | ||
![]() |
633137fd79 | ||
![]() |
9627fdf33f | ||
![]() |
b39366c80a | ||
![]() |
ac01c49666 | ||
![]() |
80d16ea407 | ||
![]() |
4f44f26333 | ||
![]() |
a21bdb1487 | ||
![]() |
4d6a2f40d3 | ||
![]() |
e6773aac0e | ||
![]() |
997381d0c3 | ||
![]() |
ac53eeb76d | ||
![]() |
a09c8934fc | ||
![]() |
b4120c39e6 | ||
![]() |
5d6320d925 | ||
![]() |
985bf50f7f | ||
![]() |
84d21af644 | ||
![]() |
267cd99b04 | ||
![]() |
401960079c | ||
![]() |
1fbc8a2850 | ||
![]() |
16fe5a94ac | ||
![]() |
1c20a4d9eb | ||
![]() |
3a9f30d954 | ||
![]() |
856aacf8ce | ||
![]() |
441b510775 | ||
![]() |
88a10b5af1 | ||
![]() |
65205ace95 | ||
![]() |
1a4ef06ee9 | ||
![]() |
64ac631040 | ||
![]() |
4e4cabb929 | ||
![]() |
b242c86869 | ||
![]() |
d37fee346a | ||
![]() |
cc52d3b0af | ||
![]() |
d5b1bae305 | ||
![]() |
04e22faf85 | ||
![]() |
48cb3ed138 | ||
![]() |
ebdeee8b3c | ||
![]() |
6449d7d4ee | ||
![]() |
4b775d15a2 | ||
![]() |
e4d6a453b0 | ||
![]() |
9dcbcd57cb | ||
![]() |
17aa44c88b | ||
![]() |
60dc266e13 | ||
![]() |
60ed308caa | ||
![]() |
c485e7e167 | ||
![]() |
71a8361580 | ||
![]() |
666dce1b6f | ||
![]() |
7bed1c2295 | ||
![]() |
51325089f0 | ||
![]() |
90666a84ac | ||
![]() |
0c37bd3a64 | ||
![]() |
753517fb56 | ||
![]() |
b939daac2a | ||
![]() |
8f2b7b2783 | ||
![]() |
883d4b4065 | ||
![]() |
ff38ae202b | ||
![]() |
7b71302a63 | ||
![]() |
cbf8fc5bb9 | ||
![]() |
00797a7834 | ||
![]() |
de092e5357 | ||
![]() |
bba8739008 | ||
![]() |
3c5564b274 | ||
![]() |
f3ff24cfbf | ||
![]() |
975b519585 | ||
![]() |
7f1f34f812 | ||
![]() |
d5bab1006e | ||
![]() |
b52e48a355 | ||
![]() |
68a807a446 | ||
![]() |
0dc6b66825 | ||
![]() |
a9db7616aa | ||
![]() |
b71e2833d6 | ||
![]() |
56bc919866 | ||
![]() |
ac3d8cddbe | ||
![]() |
aa10b392ae | ||
![]() |
e8ea1c92b1 | ||
![]() |
b5d7b80fe9 | ||
![]() |
2a328e28da | ||
![]() |
3d1cc348c8 | ||
![]() |
3d5c173d61 | ||
![]() |
9a5da5199d | ||
![]() |
764a171a25 | ||
![]() |
25061ab07c | ||
![]() |
6074925102 | ||
![]() |
f8c0c449bf | ||
![]() |
26d18c588e | ||
![]() |
6f18dd26a2 | ||
![]() |
7340bc05b4 | ||
![]() |
b0948cf9fc | ||
![]() |
86c16fa5d8 | ||
![]() |
68695bbf92 | ||
![]() |
b4fdbdeb1b | ||
![]() |
1fb3774e03 | ||
![]() |
f284a799ef | ||
![]() |
c6e759a94c | ||
![]() |
052c9a9869 | ||
![]() |
0806344ffb | ||
![]() |
d0e626c6ee | ||
![]() |
9068247856 | ||
![]() |
4553850412 | ||
![]() |
21d42c92e5 | ||
![]() |
eb9770e3ba | ||
![]() |
d54a6e0b0e | ||
![]() |
a8f5cfa640 | ||
![]() |
0d3e0c201e | ||
![]() |
cc4e4a4f91 | ||
![]() |
b597774bb9 | ||
![]() |
87fca5cffe | ||
![]() |
9685456ee4 | ||
![]() |
6a9e3ef639 | ||
![]() |
b5a9f042cc | ||
![]() |
770dcc1832 | ||
![]() |
94f7baf299 | ||
![]() |
77979eddde | ||
![]() |
f1e52b8b92 | ||
![]() |
2e414cfd63 | ||
![]() |
f5b5982e1c | ||
![]() |
eebd83d6ac | ||
![]() |
a9aee21e58 | ||
![]() |
bd9ee18e56 | ||
![]() |
c75c2d0f21 | ||
![]() |
80f3e3c3b6 | ||
![]() |
86a1fcf009 | ||
![]() |
c235c647a0 | ||
![]() |
09d8ae1316 | ||
![]() |
cb7e94449c | ||
![]() |
e742091a37 | ||
![]() |
8e3be3826f | ||
![]() |
9bc95f030c | ||
![]() |
9576d5bd89 | ||
![]() |
a0ba3ce2e4 | ||
![]() |
6b816a11f7 | ||
![]() |
86c7b8522e | ||
![]() |
f9eb2a1ee5 | ||
![]() |
174d040ca3 | ||
![]() |
6b16b08712 | ||
![]() |
e9cdb28a06 | ||
![]() |
f8abf92a66 | ||
![]() |
9413856463 | ||
![]() |
c24d46cf0f | ||
![]() |
c38e4190f1 | ||
![]() |
53cec61cdf | ||
![]() |
150c3b413a | ||
![]() |
eb15c04254 | ||
![]() |
7d7a6f7ccc | ||
![]() |
b54d18d888 | ||
![]() |
705028c79d | ||
![]() |
a91ef2ce9e | ||
![]() |
73f46d3762 | ||
![]() |
1ceda017c7 | ||
![]() |
725cedab72 | ||
![]() |
40b60e8313 | ||
![]() |
5c01f04a07 | ||
![]() |
183181ee54 | ||
![]() |
74b58cae59 | ||
![]() |
b859823011 | ||
![]() |
701320b100 | ||
![]() |
dcdcf17f5e | ||
![]() |
7c9c3de644 | ||
![]() |
cbcd281784 | ||
![]() |
e70dcdc642 | ||
![]() |
391d3e7fc7 | ||
![]() |
02d986fc89 | ||
![]() |
65a6488e44 | ||
![]() |
cf703d5213 | ||
![]() |
3a8437c6f3 | ||
![]() |
640396da64 | ||
![]() |
7e005549fe | ||
![]() |
59b3362715 | ||
![]() |
9dc8e47113 | ||
![]() |
e958545230 | ||
![]() |
76f3e170d5 | ||
![]() |
a5af49dafd | ||
![]() |
736d9fe450 | ||
![]() |
bd7a520316 | ||
![]() |
7f5b5d6f03 | ||
![]() |
8d5a59e7d5 | ||
![]() |
989acce0a5 | ||
![]() |
641b4a806a | ||
![]() |
025a44b629 | ||
![]() |
dd64bf2af7 | ||
![]() |
d5b3f65076 | ||
![]() |
66de4cbead | ||
![]() |
be3d6adf77 | ||
![]() |
65e83e8fb6 | ||
![]() |
7a2be6f12c | ||
![]() |
0d6662b558 | ||
![]() |
0a2aa54508 | ||
![]() |
f6353cfb47 | ||
![]() |
fb71ba3b7c | ||
![]() |
ac6e086c26 | ||
![]() |
4c4cfb49b4 | ||
![]() |
9a073713bb | ||
![]() |
4db3bd3270 | ||
![]() |
d5d9ed7200 | ||
![]() |
0e409bb993 | ||
![]() |
89a8769399 | ||
![]() |
fdfd94b9d0 | ||
![]() |
ba56aec353 | ||
![]() |
3ac3cedc19 | ||
![]() |
2756db6601 | ||
![]() |
7d296ee650 | ||
![]() |
ccd26b4146 | ||
![]() |
5d4269be4c | ||
![]() |
54cdfc0c16 | ||
![]() |
fd899a2e95 | ||
![]() |
d1f446aae2 | ||
![]() |
c3f04ea67d | ||
![]() |
7b56aaad53 | ||
![]() |
b73677fa5e | ||
![]() |
0040ee5cb6 | ||
![]() |
f391574113 | ||
![]() |
ea863b0c24 | ||
![]() |
4506c90e59 | ||
![]() |
894a63ed82 | ||
![]() |
0155454526 | ||
![]() |
f7aafb87a8 | ||
![]() |
227001ec32 | ||
![]() |
d765364915 | ||
![]() |
3d47e63d6f | ||
![]() |
79c5c3cc57 | ||
![]() |
8babbddcf9 | ||
![]() |
13756508d3 | ||
![]() |
b7fe001b13 | ||
![]() |
35b4110a7a | ||
![]() |
cdca0c6325 | ||
![]() |
d928f5759f | ||
![]() |
23eeb4353d | ||
![]() |
8e8d74b5b7 | ||
![]() |
094851cc7d | ||
![]() |
f55612be40 | ||
![]() |
0951f0f824 | ||
![]() |
b70fd826e7 | ||
![]() |
994559b39b | ||
![]() |
f7534b3a0f | ||
![]() |
7fcc07805a | ||
![]() |
7f9f075147 | ||
![]() |
cbfc359a99 | ||
![]() |
907842c672 | ||
![]() |
c890ab44d6 | ||
![]() |
89b11ff71c | ||
![]() |
3e34eeeed7 | ||
![]() |
69302fcbd0 | ||
![]() |
60879351a9 | ||
![]() |
f4433ac508 | ||
![]() |
7b7d0d6171 | ||
![]() |
a6e0ed09a8 | ||
![]() |
19ed6ebbaf | ||
![]() |
dfeee17d39 | ||
![]() |
4c429c869c | ||
![]() |
6d8a361c9a | ||
![]() |
825de1b6ee | ||
![]() |
124461f587 | ||
![]() |
a570fa6110 | ||
![]() |
0e8df83bbd | ||
![]() |
952c8428d8 | ||
![]() |
5fe2c10aa1 | ||
![]() |
1f4aa2506b | ||
![]() |
9f8844fa5f | ||
![]() |
990aa88e00 | ||
![]() |
9e335c1894 | ||
![]() |
8f2b9a6bb7 | ||
![]() |
448f3e8918 | ||
![]() |
62b2ab7571 | ||
![]() |
46fa9a9366 | ||
![]() |
29fee28d1d | ||
![]() |
78cbfa20d9 | ||
![]() |
ccd42d42ab | ||
![]() |
abe03ef9a3 | ||
![]() |
9813ffb83b | ||
![]() |
b4eefa3eed | ||
![]() |
3490273b49 | ||
![]() |
65c8b6e66a | ||
![]() |
6a166b798a | ||
![]() |
0686aec606 | ||
![]() |
54b3c62803 | ||
![]() |
40d83ba7e7 | ||
![]() |
ea3c379d88 | ||
![]() |
a6ee3e99ea | ||
![]() |
b2cab4aea0 | ||
![]() |
2a2e532acc | ||
![]() |
0954a494e7 | ||
![]() |
bc32c946ff | ||
![]() |
95debf66e5 | ||
![]() |
3b166f82a8 | ||
![]() |
7d19250565 | ||
![]() |
c510a4149d | ||
![]() |
33e473c509 | ||
![]() |
e3dfdb0b06 | ||
![]() |
efa262480a | ||
![]() |
2c8dd9ce2a | ||
![]() |
ead1399e7b | ||
![]() |
5ebde97352 | ||
![]() |
f6c624b59a | ||
![]() |
4a4b1e0e49 | ||
![]() |
cb5e37184a | ||
![]() |
4b78a9366d | ||
![]() |
90b9223aae | ||
![]() |
094a3af8ae | ||
![]() |
0d2296917a | ||
![]() |
d6fffc7e55 | ||
![]() |
283d33aa27 | ||
![]() |
6c445c0833 | ||
![]() |
dd10c1756f | ||
![]() |
74bda719a6 | ||
![]() |
ced75a9b60 | ||
![]() |
5ecad47d6e | ||
![]() |
6e11ca1ac4 | ||
![]() |
edfdabb691 | ||
![]() |
4653e94c57 | ||
![]() |
54df50f84d | ||
![]() |
7588c8de5a | ||
![]() |
d564199e88 | ||
![]() |
e458adb342 | ||
![]() |
b43a7354cf | ||
![]() |
6341ad88e8 | ||
![]() |
314b2fb14f | ||
![]() |
795ba89dc4 | ||
![]() |
5b8ff28556 | ||
![]() |
5e66a66111 | ||
![]() |
3e6bed538a | ||
![]() |
f893edeb82 | ||
![]() |
64e4adef29 | ||
![]() |
c1fe03aab6 | ||
![]() |
25db3c2940 | ||
![]() |
442290d7f0 | ||
![]() |
a6eb871f5e | ||
![]() |
b500c3f526 | ||
![]() |
4b0a071a35 | ||
![]() |
4ef69969a7 | ||
![]() |
c5885d9ce4 | ||
![]() |
4c2d705311 | ||
![]() |
939017ada9 | ||
![]() |
322c5c05cf | ||
![]() |
cd174b8ce9 | ||
![]() |
f5999f28e9 | ||
![]() |
428a754bfc | ||
![]() |
9ba2a9d907 | ||
![]() |
71a22348c9 | ||
![]() |
4ac0db1869 | ||
![]() |
bca9035302 | ||
![]() |
33b316d72f | ||
![]() |
020322df0b | ||
![]() |
6068043fd4 | ||
![]() |
2bf4032a6f | ||
![]() |
5e659e3f46 | ||
![]() |
23f70d6b8b | ||
![]() |
ddcf2c5206 | ||
![]() |
6b88349c77 | ||
![]() |
4eb2d3805d | ||
![]() |
6cdddc4e9f | ||
![]() |
406d844722 | ||
![]() |
09ee0357c7 | ||
![]() |
f603f63361 | ||
![]() |
720bb5d615 | ||
![]() |
eebd76661d | ||
![]() |
7885ae5d3f | ||
![]() |
08257cc5dd | ||
![]() |
27f8144bb8 | ||
![]() |
146d4a8365 | ||
![]() |
bddd9b3409 | ||
![]() |
0d4d83f3a6 | ||
![]() |
4bb0bb4ff0 | ||
![]() |
2d75968532 | ||
![]() |
aa0e759168 | ||
![]() |
cdae745c00 | ||
![]() |
a8b6af1f03 | ||
![]() |
c7106073b4 | ||
![]() |
d96139798f | ||
![]() |
bd560644fe | ||
![]() |
f6772c4138 | ||
![]() |
dd733640e5 | ||
![]() |
75a0c0a527 | ||
![]() |
a5925875a7 | ||
![]() |
84157f9247 | ||
![]() |
fcf3ed7881 | ||
![]() |
dac3be69d6 | ||
![]() |
5118e5cceb | ||
![]() |
7ca0d20dda | ||
![]() |
378222e484 | ||
![]() |
812bec205c | ||
![]() |
2ee8803e33 | ||
![]() |
007616ca42 | ||
![]() |
f3b235e4a7 | ||
![]() |
074d4be4ba | ||
![]() |
03cd48257b | ||
![]() |
546db83de3 | ||
![]() |
cc11a39f7e | ||
![]() |
a83b365afd | ||
![]() |
6a6cfac603 | ||
![]() |
5270cedc56 | ||
![]() |
2ac833d2a6 | ||
![]() |
f7be210b12 | ||
![]() |
24774d7921 | ||
![]() |
2b2e954b84 | ||
![]() |
85108be686 | ||
![]() |
9fbac943bb | ||
![]() |
d901eaa8d2 | ||
![]() |
5fb0e8d007 | ||
![]() |
cd5c76cb76 | ||
![]() |
b2a64f8bf3 | ||
![]() |
b91acc9de5 | ||
![]() |
07836c7ffa | ||
![]() |
8b30a0d7cc | ||
![]() |
13a3e2feb2 | ||
![]() |
f4dca71497 | ||
![]() |
e4c6e87338 | ||
![]() |
b2862520fd | ||
![]() |
bb29f1ea95 | ||
![]() |
69b92757f4 | ||
![]() |
62ae2652c7 | ||
![]() |
6f6633050b | ||
![]() |
d37bfd6651 | ||
![]() |
55a17a8a83 | ||
![]() |
422b06b72d | ||
![]() |
873a1d1c3b | ||
![]() |
44d06767b5 | ||
![]() |
3f4379afbf | ||
![]() |
c0515de6b7 | ||
![]() |
09159ec245 | ||
![]() |
ab0bf80888 | ||
![]() |
74b8eaed04 | ||
![]() |
d64b5ccae2 | ||
![]() |
3883212ca7 | ||
![]() |
1cec41dba0 | ||
![]() |
d00c0ff60c | ||
![]() |
1d597c5f5b | ||
![]() |
c004ef7d0b | ||
![]() |
1bfb977b28 | ||
![]() |
04138047f6 | ||
![]() |
147e99a915 | ||
![]() |
6f7d162edc | ||
![]() |
910aee4b73 | ||
![]() |
77e376751a | ||
![]() |
7e1264ac44 | ||
![]() |
8f3a4a5a04 | ||
![]() |
2d2689362d | ||
![]() |
913500a6de | ||
![]() |
81d7c54a55 | ||
![]() |
4501d5a8fc | ||
![]() |
becc90409f | ||
![]() |
10c4f7b465 | ||
![]() |
cb5b0ff764 | ||
![]() |
277a817eaf | ||
![]() |
fbac6f6a57 | ||
![]() |
b1b0d6ceb6 | ||
![]() |
07421542df | ||
![]() |
74a8139ac9 | ||
![]() |
77eb76fefb | ||
![]() |
42a450c61f | ||
![]() |
9e2ed10144 | ||
![]() |
27e5ce7f9b | ||
![]() |
f7b322da49 | ||
![]() |
16ad13c962 | ||
![]() |
a8880bbc0a | ||
![]() |
f020b88db3 | ||
![]() |
a4f5c9e2a3 | ||
![]() |
96d3841dba | ||
![]() |
39277d569f | ||
![]() |
75b5bc03f7 | ||
![]() |
01e17d9c2e | ||
![]() |
8047ff96a8 | ||
![]() |
0e737a2f3b | ||
![]() |
854579d814 | ||
![]() |
f3cbd99e45 | ||
![]() |
c13ed3f347 | ||
![]() |
7409b58546 | ||
![]() |
404ebb8810 | ||
![]() |
b4a9a300c5 | ||
![]() |
aa637e6a2b | ||
![]() |
85132e1e6e | ||
![]() |
f0aa5a4646 | ||
![]() |
b0479d0bd9 | ||
![]() |
e475b888aa | ||
![]() |
a8a3bbd9f5 | ||
![]() |
f3cbd17598 | ||
![]() |
3d7e4dc286 | ||
![]() |
2e98729527 | ||
![]() |
3ac838a7ec | ||
![]() |
a1bd5bfc00 | ||
![]() |
b99571a797 | ||
![]() |
43dec8914c | ||
![]() |
5b5cb78595 | ||
![]() |
cb8c919609 | ||
![]() |
be3810dfed | ||
![]() |
b961b59ad4 | ||
![]() |
d2fbb86d8a | ||
![]() |
782c6211d0 | ||
![]() |
c0dd11b61a | ||
![]() |
885830849e | ||
![]() |
079958f66b | ||
![]() |
77c5d7d160 | ||
![]() |
327195dcca | ||
![]() |
cfbc88d375 | ||
![]() |
d75a11b397 | ||
![]() |
8706da2890 | ||
![]() |
824a06c39b | ||
![]() |
9c80c37ee9 | ||
![]() |
ad6d383ee2 | ||
![]() |
5251f970b7 | ||
![]() |
2225927bb1 | ||
![]() |
d210b600d7 | ||
![]() |
70da5769d4 | ||
![]() |
69e3814c77 | ||
![]() |
d950e11332 | ||
![]() |
1a2b18f722 | ||
![]() |
af78369f87 | ||
![]() |
8e4aca0582 | ||
![]() |
b603c178d1 | ||
![]() |
31e5a7afb0 | ||
![]() |
6fb1847327 | ||
![]() |
0c1d773134 | ||
![]() |
894ea27df2 | ||
![]() |
f13731f91e | ||
![]() |
6742cbfd59 | ||
![]() |
6c0dea6138 | ||
![]() |
388e8d0c2f | ||
![]() |
27b455592a | ||
![]() |
dad1c04528 | ||
![]() |
4ad9fcdc6f | ||
![]() |
81b7fe0e9c | ||
![]() |
735cc8d6cc | ||
![]() |
43a1c4ce11 | ||
![]() |
9ca048a881 | ||
![]() |
bab3dd417e | ||
![]() |
11541310d6 | ||
![]() |
76740303c5 | ||
![]() |
0a7ecb89ce | ||
![]() |
c16a7d5da2 | ||
![]() |
b03723c3fb | ||
![]() |
40213b2d6a | ||
![]() |
e8b71e867c | ||
![]() |
8ab1b7fd8f | ||
![]() |
8009aa975e | ||
![]() |
cea706d14a | ||
![]() |
7b60648424 | ||
![]() |
3cb4952281 | ||
![]() |
ec1ae647b0 | ||
![]() |
a3be9f36b3 | ||
![]() |
451910763d | ||
![]() |
884dc38701 | ||
![]() |
3cca7aead9 | ||
![]() |
4c4852129e | ||
![]() |
ae2b0cc76b | ||
![]() |
71e963c853 | ||
![]() |
89b680f6d9 | ||
![]() |
f3eacac4ce | ||
![]() |
26ec32cbe1 | ||
![]() |
6d74038866 | ||
![]() |
7e45e88914 | ||
![]() |
62a4869eb7 | ||
![]() |
4f8b51701b | ||
![]() |
169bcc2550 | ||
![]() |
88b29cbbf9 | ||
![]() |
51d4d0d3dc | ||
![]() |
a482aa1e21 | ||
![]() |
040b38689d | ||
![]() |
8e8e53c4d5 | ||
![]() |
d717c6d2f6 | ||
![]() |
9587ce97a8 | ||
![]() |
aaaf573475 | ||
![]() |
6c6f322d90 | ||
![]() |
c03f0ed1fb | ||
![]() |
55287393be | ||
![]() |
9575f92165 | ||
![]() |
a5cbaad804 | ||
![]() |
f492414b5e | ||
![]() |
3e6ddf7176 | ||
![]() |
29ffb05653 | ||
![]() |
50c3ee2e9c | ||
![]() |
6292470677 | ||
![]() |
8d912f2673 | ||
![]() |
227d129c3a | ||
![]() |
d9eeb6afa0 | ||
![]() |
478aecb0f4 | ||
![]() |
abb82154c9 | ||
![]() |
03c8b6b5f5 | ||
![]() |
2281300165 | ||
![]() |
84068d101b | ||
![]() |
62020fa85b | ||
![]() |
3c8bf5ccc9 | ||
![]() |
71d5762be8 | ||
![]() |
65d5358366 | ||
![]() |
6ecdfaf19e | ||
![]() |
32bd6ae1ac | ||
![]() |
92231a1e26 | ||
![]() |
38ad4dc440 | ||
![]() |
6645a47b0e | ||
![]() |
75a2d20b0b | ||
![]() |
8c15d708e6 | ||
![]() |
539b7ad87b | ||
![]() |
fc7c2c9f5a | ||
![]() |
3cd760f654 | ||
![]() |
2ec0a5d003 | ||
![]() |
1a605e814b | ||
![]() |
fe0053a15d | ||
![]() |
014f3e5aff | ||
![]() |
4a25e3b644 | ||
![]() |
e7f59bc436 | ||
![]() |
488d1ccd5a | ||
![]() |
409b36c254 | ||
![]() |
b0e567dbfa | ||
![]() |
c6086ba281 | ||
![]() |
aede925351 | ||
![]() |
9d38c66510 | ||
![]() |
0c516189c3 | ||
![]() |
c2936ea289 | ||
![]() |
dc33460a34 | ||
![]() |
ffacc93b55 | ||
![]() |
74f0ee2718 | ||
![]() |
7189791d9f | ||
![]() |
dc18d53c8f | ||
![]() |
f71ef8e130 | ||
![]() |
6eec9d8993 | ||
![]() |
9560f98359 | ||
![]() |
217433bf69 | ||
![]() |
ff5db1b939 | ||
![]() |
455a46d3ad | ||
![]() |
039a879104 | ||
![]() |
dfba9ea53b | ||
![]() |
177cce5e8f | ||
![]() |
309d36260e | ||
![]() |
bdc73eb755 | ||
![]() |
0786750eb9 | ||
![]() |
9f5d921275 | ||
![]() |
8991b2d8e3 | ||
![]() |
79dffce59b | ||
![]() |
e0301a621b | ||
![]() |
1e4361abdc | ||
![]() |
80c26fd278 | ||
![]() |
3339531086 | ||
![]() |
07ad9fbb11 | ||
![]() |
6ddc581d76 | ||
![]() |
dfe94172aa | ||
![]() |
edb632f9c7 | ||
![]() |
7f73612b9f | ||
![]() |
7f130f18b6 | ||
![]() |
d05a4c53aa | ||
![]() |
d99a9b90a0 | ||
![]() |
f311225312 | ||
![]() |
dee17fc313 | ||
![]() |
0662538d60 | ||
![]() |
5b52ad91ac | ||
![]() |
8552c41bff | ||
![]() |
7ecd298285 | ||
![]() |
2546f515d1 | ||
![]() |
8804924d27 | ||
![]() |
e410cae141 | ||
![]() |
140cfaec90 | ||
![]() |
a0f20aac23 | ||
![]() |
93fafb362f | ||
![]() |
9152df5512 | ||
![]() |
415bcd9f7e | ||
![]() |
2224033a85 | ||
![]() |
ade0498684 | ||
![]() |
211b00fff4 | ||
![]() |
77c72d03a8 | ||
![]() |
f429d93351 | ||
![]() |
e428f8b116 | ||
![]() |
9482b9d638 | ||
![]() |
e019c9f720 | ||
![]() |
e2778366e9 | ||
![]() |
36d2f8339c | ||
![]() |
a4a0c3b9fd | ||
![]() |
1b1b6c8af8 | ||
![]() |
064fd2bc68 | ||
![]() |
13152ab6ea | ||
![]() |
1743d821eb | ||
![]() |
ff16e577ef | ||
![]() |
86062c6e94 | ||
![]() |
8ce2350563 | ||
![]() |
cb8989af7f | ||
![]() |
877fa45eb4 | ||
![]() |
e33942486d | ||
![]() |
9606e080ef | ||
![]() |
d5cd9c55be | ||
![]() |
9c197ced80 | ||
![]() |
f8424599e1 | ||
![]() |
ccee18057a | ||
![]() |
1ad0f342ad | ||
![]() |
7a16ac574b | ||
![]() |
f46738f750 | ||
![]() |
fb8ff3fece | ||
![]() |
7498dd3800 | ||
![]() |
957c31b9c5 | ||
![]() |
b260570e8c | ||
![]() |
46542747b7 | ||
![]() |
d64480fc9b | ||
![]() |
c00e694d40 | ||
![]() |
f0761cc95e | ||
![]() |
068554955c | ||
![]() |
a2f915f556 | ||
![]() |
cffd35c974 | ||
![]() |
2ef2aa98a4 | ||
![]() |
ba98b30aa4 | ||
![]() |
87c0f9c803 | ||
![]() |
ce620b9e28 | ||
![]() |
fcbb5536eb | ||
![]() |
72df6dbd80 | ||
![]() |
3a6b023dbf | ||
![]() |
8b67f1358d | ||
![]() |
2aebb3b8db | ||
![]() |
f2b38be2b0 | ||
![]() |
a43001f30d | ||
![]() |
17abe1ea5c | ||
![]() |
6aaefab618 | ||
![]() |
cd867fb4d1 | ||
![]() |
25988f61a6 | ||
![]() |
be421e580d | ||
![]() |
641ab25470 | ||
![]() |
a508539c2e | ||
![]() |
cac79d9a0d | ||
![]() |
9ede8118da | ||
![]() |
e47761750a | ||
![]() |
2f181ce7c9 | ||
![]() |
3a13d4a1de | ||
![]() |
719de00e0f | ||
![]() |
ddffe99f53 | ||
![]() |
9ade596f06 | ||
![]() |
46f413b7f2 | ||
![]() |
5fe2e7b8ad | ||
![]() |
3008cbb5f4 | ||
![]() |
f7983960e5 | ||
![]() |
bb8007bb7c | ||
![]() |
01751ba97a | ||
![]() |
f41475d11c | ||
![]() |
d8914d9b6d | ||
![]() |
94cc2ad365 | ||
![]() |
e07464b81c | ||
![]() |
9d231b55b5 | ||
![]() |
77d8dac3c1 | ||
![]() |
e160015283 | ||
![]() |
aeb0cac3ee | ||
![]() |
a539f94837 | ||
![]() |
df70751071 | ||
![]() |
e55f1dff78 | ||
![]() |
47646e1c62 | ||
![]() |
80e673f20c | ||
![]() |
9ca8c5480c | ||
![]() |
4d0d3c7ead | ||
![]() |
58137aadc9 | ||
![]() |
82a59ae479 | ||
![]() |
affd23b14e | ||
![]() |
9c7f249756 | ||
![]() |
e2a0502171 | ||
![]() |
3832a4b355 | ||
![]() |
84f059415c | ||
![]() |
bb292e3199 | ||
![]() |
70541bf561 | ||
![]() |
48dd8e88e3 | ||
![]() |
52c2e0899d | ||
![]() |
9955d5b62f | ||
![]() |
8e26247fa1 | ||
![]() |
72924e2692 | ||
![]() |
8c2c8d630f | ||
![]() |
5ccf0baa6b | ||
![]() |
8fff0ccdf2 | ||
![]() |
35264bfb97 | ||
![]() |
4c9b0dc8e9 | ||
![]() |
4deb7caa83 | ||
![]() |
45f1a512b4 | ||
![]() |
ab95fdc087 | ||
![]() |
df608b9ded | ||
![]() |
6a4c81d160 | ||
![]() |
040d658540 | ||
![]() |
cbc9913e9c | ||
![]() |
f007cbd5ee | ||
![]() |
7351591df7 | ||
![]() |
5222d4cbba | ||
![]() |
ef9966815e | ||
![]() |
ad73440ce9 | ||
![]() |
c81cfdc455 | ||
![]() |
134c3804db | ||
![]() |
e355df5eda | ||
![]() |
a68e0a95f4 | ||
![]() |
6fd6facf72 | ||
![]() |
00102d4048 | ||
![]() |
adbeff11d4 | ||
![]() |
a8fe329678 | ||
![]() |
a4b61bf730 | ||
![]() |
ee592def0c | ||
![]() |
c14e117239 | ||
![]() |
b6e94dde0c | ||
![]() |
63a4a44d7e | ||
![]() |
eb8ab5d527 | ||
![]() |
b778d40d65 | ||
![]() |
2f570672dc | ||
![]() |
9290ed490f | ||
![]() |
1bda812c75 | ||
![]() |
ab82406c98 | ||
![]() |
be763349df | ||
![]() |
91764ad601 | ||
![]() |
1c4031aa38 | ||
![]() |
c3bc648dd4 | ||
![]() |
c97d794272 | ||
![]() |
8e7d2e91e9 | ||
![]() |
cf0fbbbd3d | ||
![]() |
7d3ede7946 | ||
![]() |
1aa308eb5d | ||
![]() |
4bfd30e34a | ||
![]() |
0f46c90688 | ||
![]() |
aa2173fc4a | ||
![]() |
932cb1d19c | ||
![]() |
18b038d8e4 | ||
![]() |
2ac71c75c0 | ||
![]() |
4067ba5232 | ||
![]() |
ab47dd5a5b | ||
![]() |
3130910307 | ||
![]() |
22113439a4 | ||
![]() |
2d25a9ad7a | ||
![]() |
8f0a2cc2f0 | ||
![]() |
4ca39258c9 | ||
![]() |
d0c0238b8b | ||
![]() |
f9f08e5169 | ||
![]() |
cfc51b2401 | ||
![]() |
54c2704cb5 | ||
![]() |
9b51c946fe | ||
![]() |
06f38cbcb4 | ||
![]() |
f368d6b257 | ||
![]() |
f4301da14d | ||
![]() |
f34c09f165 | ||
![]() |
6d1db56512 | ||
![]() |
b70c07d004 | ||
![]() |
f9f48a5eb6 | ||
![]() |
14e4e73444 | ||
![]() |
f2ce4d2daf | ||
![]() |
468ebdda87 | ||
![]() |
a1f0fb3b14 | ||
![]() |
3c9f4de234 | ||
![]() |
8ae411619f | ||
![]() |
61e5c9121a | ||
![]() |
8a3cf0d5dc | ||
![]() |
ecb5df65ac | ||
![]() |
5f1e98a0d3 | ||
![]() |
3b9a477499 | ||
![]() |
e5bf98a741 | ||
![]() |
06fafc247e | ||
![]() |
e8bb17b631 | ||
![]() |
363cd07883 | ||
![]() |
2b4a9286c4 | ||
![]() |
34c985026f | ||
![]() |
4a0aa42914 | ||
![]() |
746c2a15bf | ||
![]() |
9318bb5306 | ||
![]() |
2a10ceb74f | ||
![]() |
83f4db59e2 | ||
![]() |
9f66f759ad | ||
![]() |
6f015349e8 | ||
![]() |
a37802c2b9 | ||
![]() |
4fa3baf5e1 | ||
![]() |
ef8c2c81d5 | ||
![]() |
8c80d8c457 | ||
![]() |
1596872c54 | ||
![]() |
da8873fa78 | ||
![]() |
ecd8439b3f | ||
![]() |
5d178532ac | ||
![]() |
08e40a013d | ||
![]() |
c136f7363c | ||
![]() |
a60f10d739 | ||
![]() |
ae46afcb42 | ||
![]() |
bffb9f6800 | ||
![]() |
79aa9ad04b | ||
![]() |
ff5714f04a | ||
![]() |
ce499a9766 | ||
![]() |
d3bb8b7651 | ||
![]() |
6d9c23c4cb | ||
![]() |
b95a9332a9 | ||
![]() |
609715eb5c | ||
![]() |
a1266c919c | ||
![]() |
a1925a0302 | ||
![]() |
a7a4c03372 | ||
![]() |
37201600e0 | ||
![]() |
a94f40ed62 | ||
![]() |
0b08cf8c76 | ||
![]() |
33e29be7db | ||
![]() |
bd1c7851c7 | ||
![]() |
82faea5965 | ||
![]() |
0bbbfd3217 | ||
![]() |
fb578ecda8 | ||
![]() |
e804647a65 | ||
![]() |
c3c3a94593 | ||
![]() |
9d55569f80 | ||
![]() |
5dd8271c15 | ||
![]() |
7a4a54c3ea | ||
![]() |
7c9078a625 | ||
![]() |
71ae342f52 | ||
![]() |
b43c56085d | ||
![]() |
83d2ab95e0 | ||
![]() |
20a8d7372c | ||
![]() |
c36ba88db7 | ||
![]() |
4aa23023ee | ||
![]() |
8735cf931a | ||
![]() |
2473069326 | ||
![]() |
03bab57a97 | ||
![]() |
e3baf69533 | ||
![]() |
461f747af1 | ||
![]() |
028872a7d8 | ||
![]() |
a1483b6c55 | ||
![]() |
e406ba094c | ||
![]() |
c100d15ba8 | ||
![]() |
b4ea592638 | ||
![]() |
16b757d9a3 | ||
![]() |
2aa801a392 | ||
![]() |
b838344526 | ||
![]() |
233a3df222 | ||
![]() |
da6661b1ea | ||
![]() |
c6e120fc51 | ||
![]() |
c416a1254d | ||
![]() |
2aa4f6ddda | ||
![]() |
129597023d | ||
![]() |
02aed86b7e | ||
![]() |
e44f4b5823 | ||
![]() |
2f0c0f0fc2 | ||
![]() |
e5ce3f3007 | ||
![]() |
095a2be748 | ||
![]() |
c75fe88757 | ||
![]() |
a8ff4b0744 | ||
![]() |
c02c511e31 | ||
![]() |
b9550fb528 | ||
![]() |
a37d8f083a | ||
![]() |
abff1f537b | ||
![]() |
483fde5e42 | ||
![]() |
761b7ea57b | ||
![]() |
af92631a0c | ||
![]() |
ffe832d061 | ||
![]() |
a08cbfcef1 | ||
![]() |
d2d6ac1bf8 | ||
![]() |
615ffca64b | ||
![]() |
2fcf6197c5 | ||
![]() |
22d31ae14f | ||
![]() |
8c786e121b | ||
![]() |
99d2a33c8c | ||
![]() |
010a24db3f | ||
![]() |
9408da453b | ||
![]() |
dbda4202fd | ||
![]() |
5776e91459 | ||
![]() |
664d7b69b1 | ||
![]() |
6b9140c60d | ||
![]() |
383857d110 | ||
![]() |
cffd049c8a | ||
![]() |
ecabc65e94 | ||
![]() |
780f1d5da3 | ||
![]() |
e2d0fc34a3 | ||
![]() |
3404231457 | ||
![]() |
b17928570d | ||
![]() |
8ed86261ef | ||
![]() |
a313b91a0a | ||
![]() |
7b6dae20be | ||
![]() |
552c70bb0d | ||
![]() |
8f734737f0 | ||
![]() |
800e7bcb7a | ||
![]() |
2002234d86 | ||
![]() |
5923663e08 | ||
![]() |
4cdf20ab8c | ||
![]() |
af65a1cfef | ||
![]() |
927057ab83 | ||
![]() |
ffbc001ad5 | ||
![]() |
f5625a1151 | ||
![]() |
ce2ceb8a1b | ||
![]() |
c14771534f | ||
![]() |
553cec16d5 | ||
![]() |
d17496f720 | ||
![]() |
89e70626eb | ||
![]() |
2ccae841d6 | ||
![]() |
07f6d0f149 | ||
![]() |
319d769233 | ||
![]() |
6ec393699e | ||
![]() |
f8d9e0fa60 | ||
![]() |
50ed962a82 | ||
![]() |
8654705e9b | ||
![]() |
b79ed8185f | ||
![]() |
0d6c67f64f | ||
![]() |
e97a6569a6 | ||
![]() |
d0d41c6b16 | ||
![]() |
f7a531e71b | ||
![]() |
c28fddc4dd | ||
![]() |
b6ea10fc73 | ||
![]() |
320eb44061 | ||
![]() |
7a6b5dd5b7 | ||
![]() |
460653ed16 | ||
![]() |
b6fda788c5 | ||
![]() |
da4b9306fa | ||
![]() |
d76c02cbf4 | ||
![]() |
4d5466b5cd | ||
![]() |
e9c20ac8b0 | ||
![]() |
961820a250 | ||
![]() |
4cc2976061 | ||
![]() |
477f182b43 | ||
![]() |
a5252bb765 | ||
![]() |
3f0078f38a | ||
![]() |
91434dd2ac | ||
![]() |
f29bd0a6e7 | ||
![]() |
7186f58374 | ||
![]() |
5c8bcf15ba | ||
![]() |
130757ee99 | ||
![]() |
5020a4f9dc | ||
![]() |
ef15902ec4 | ||
![]() |
ed8d13f837 | ||
![]() |
c2fcae7c43 | ||
![]() |
27f2c65e6d | ||
![]() |
0b3428ede9 | ||
![]() |
3e0102ad2a | ||
![]() |
c42002ccc5 | ||
![]() |
e8101d5d91 | ||
![]() |
ecdf4ad502 | ||
![]() |
af760f9cdc | ||
![]() |
b3491da49f | ||
![]() |
c322feeaff | ||
![]() |
b26f46a063 | ||
![]() |
9f0944dc5a | ||
![]() |
e869098434 | ||
![]() |
4baa23af5f | ||
![]() |
78fc5bbbd5 | ||
![]() |
a69784d168 | ||
![]() |
d48a7f1a18 | ||
![]() |
082c6128ad | ||
![]() |
7c9771873b | ||
![]() |
7257cdacc8 | ||
![]() |
140b480f82 | ||
![]() |
77db2f8a48 | ||
![]() |
22bc81b0eb | ||
![]() |
b52b3d4be0 | ||
![]() |
f845098b42 | ||
![]() |
0f7397e3b8 | ||
![]() |
0b9d99fdc9 | ||
![]() |
9a1da5cc75 | ||
![]() |
9e76f94cf6 | ||
![]() |
7d6b92e064 | ||
![]() |
849a45a3ca | ||
![]() |
7ddea5a71b | ||
![]() |
5d81358c15 | ||
![]() |
492aad9d70 | ||
![]() |
647cfcd401 | ||
![]() |
c60d98e52d | ||
![]() |
d3cfac6b15 | ||
![]() |
7fb4e5a143 | ||
![]() |
8e451b2a83 | ||
![]() |
8083f06fe7 | ||
![]() |
44521a2e56 | ||
![]() |
dfeed3d0eb | ||
![]() |
081a45b70d | ||
![]() |
616a721bba | ||
![]() |
c9aa553b32 | ||
![]() |
e3d59c3cff | ||
![]() |
df51635674 | ||
![]() |
1e81f61760 | ||
![]() |
a4043eab83 | ||
![]() |
60dc19d2bc | ||
![]() |
a2e4585fe8 | ||
![]() |
b5df281447 | ||
![]() |
650917f9f9 | ||
![]() |
3a9c95a9ae | ||
![]() |
5458acfcad | ||
![]() |
68e80e6054 | ||
![]() |
e4aa69b8d3 | ||
![]() |
dfd40e43da | ||
![]() |
7efd111d9c | ||
![]() |
6809172203 | ||
![]() |
40a4343f06 | ||
![]() |
cd9333b39e | ||
![]() |
82d426c781 | ||
![]() |
c7e773de25 | ||
![]() |
2ded33110f | ||
![]() |
b26c0aa9da | ||
![]() |
2fc8fb6f17 | ||
![]() |
ea76f1d6e2 | ||
![]() |
7cda1d116b | ||
![]() |
8bf7a1a9db | ||
![]() |
0aa0ad65c0 | ||
![]() |
53ff58daa3 | ||
![]() |
b3225bebe6 | ||
![]() |
4beafad71f | ||
![]() |
c96f933626 | ||
![]() |
bea6359d5f | ||
![]() |
92db9cb59b | ||
![]() |
410c4ca736 | ||
![]() |
80c9dbf180 | ||
![]() |
c9edac2820 | ||
![]() |
143df9a529 | ||
![]() |
c87da9903f | ||
![]() |
0f69e6c64d | ||
![]() |
1b9a6e53ce | ||
![]() |
c7abf377eb | ||
![]() |
175d8ce572 | ||
![]() |
1708a401cf | ||
![]() |
141278e668 | ||
![]() |
754bd82699 | ||
![]() |
999efb6660 | ||
![]() |
0b391a9ef3 | ||
![]() |
2a99ac4430 | ||
![]() |
a5589d0865 | ||
![]() |
83541a0d5d | ||
![]() |
ac0dff7aa1 | ||
![]() |
f22b5157f5 | ||
![]() |
659d0d6115 | ||
![]() |
fd8c99fd8d | ||
![]() |
9494f3a299 | ||
![]() |
8021848b03 | ||
![]() |
5a127c26e6 | ||
![]() |
a7d734c20c | ||
![]() |
7c7129f9a1 | ||
![]() |
05cbc7891d | ||
![]() |
14623456ff | ||
![]() |
5064ec3ac4 | ||
![]() |
892888796d | ||
![]() |
4f2826d2c2 | ||
![]() |
7f824d725b | ||
![]() |
da4096c4ef | ||
![]() |
1aed11c156 | ||
![]() |
e99e944ac3 | ||
![]() |
6e523d37ba | ||
![]() |
2aebf6b522 | ||
![]() |
3f740980a3 | ||
![]() |
66b73d1592 | ||
![]() |
be4b03b84b | ||
![]() |
3594037efe | ||
![]() |
38c5cb50fb | ||
![]() |
3767a96e0f | ||
![]() |
937a387f4e | ||
![]() |
cd65f1dffc | ||
![]() |
d4e6856cbe | ||
![]() |
f61d779108 | ||
![]() |
b8b22d4d91 | ||
![]() |
25d0e39736 | ||
![]() |
79a9497e65 | ||
![]() |
c55dcccb1e | ||
![]() |
820e606719 | ||
![]() |
96291a8522 | ||
![]() |
e7b52bd3b0 | ||
![]() |
dd3251c08d | ||
![]() |
f4aabdd9b8 | ||
![]() |
cb1fe5f017 | ||
![]() |
83837bde11 | ||
![]() |
05189dadbf | ||
![]() |
dbb1f371b3 | ||
![]() |
5cc1bbc4bb | ||
![]() |
53796043c3 | ||
![]() |
a5ac528c02 | ||
![]() |
54eb353d0d | ||
![]() |
3391067cab | ||
![]() |
b4f595eb75 | ||
![]() |
58bc0c17d0 | ||
![]() |
4385404ad6 | ||
![]() |
61aadcffd2 | ||
![]() |
f575826394 | ||
![]() |
389959dd18 | ||
![]() |
af4734eee3 | ||
![]() |
f76b37ec39 | ||
![]() |
379149fe2f | ||
![]() |
3bd477631c | ||
![]() |
72c0987bad | ||
![]() |
5bba8e02a6 | ||
![]() |
b270de3335 | ||
![]() |
e22bcf0ac5 | ||
![]() |
c1d55d828f | ||
![]() |
da77970328 | ||
![]() |
32f3caaee0 | ||
![]() |
8bbacb1d78 | ||
![]() |
5904510410 | ||
![]() |
e16624251b | ||
![]() |
389f22a0e5 | ||
![]() |
7b91aa16b6 | ||
![]() |
89ec688632 | ||
![]() |
fdd0d586c9 | ||
![]() |
6f5604791f | ||
![]() |
eb9fba4147 | ||
![]() |
afb62f729f | ||
![]() |
1ccc23dc9c | ||
![]() |
7ea5cb9c5c | ||
![]() |
c301d6e5d5 | ||
![]() |
44ad69b94d | ||
![]() |
d14515ab88 | ||
![]() |
01875b389d | ||
![]() |
5eef116aaa | ||
![]() |
442220debc | ||
![]() |
4914caad51 | ||
![]() |
08cab863f1 | ||
![]() |
02458d4fc1 | ||
![]() |
6ed4130b66 | ||
![]() |
5f7ee15d1e | ||
![]() |
43afd5a2b8 | ||
![]() |
f9ac199c1f | ||
![]() |
920c169d55 | ||
![]() |
76ba2824a2 | ||
![]() |
ca0d594547 | ||
![]() |
44b6d900f0 | ||
![]() |
3b2c0186aa | ||
![]() |
efa605700d | ||
![]() |
cac360d37b | ||
![]() |
75e28893fb | ||
![]() |
360a44b5a0 | ||
![]() |
2b89e24a4b | ||
![]() |
931f34d2fd | ||
![]() |
abfdcea4db | ||
![]() |
80b3b8ac0f | ||
![]() |
60e18aa045 | ||
![]() |
85e2b124ab | ||
![]() |
81a8cd0641 | ||
![]() |
303805755d | ||
![]() |
38837d6424 | ||
![]() |
8a582c2a24 | ||
![]() |
5cfb65002d | ||
![]() |
fa6dee45ec | ||
![]() |
af25fe93da | ||
![]() |
395ad3e8ef | ||
![]() |
2cbaca8968 | ||
![]() |
bf90788e04 | ||
![]() |
83ffb849cd | ||
![]() |
a34a33e419 | ||
![]() |
57f620485f | ||
![]() |
18cdde963b | ||
![]() |
6c1f472de3 | ||
![]() |
efd2ac353e | ||
![]() |
863bf9dc8b | ||
![]() |
fd411c17cd | ||
![]() |
5424c23d69 | ||
![]() |
b8a0801786 | ||
![]() |
39ff1cd898 | ||
![]() |
a2a3b0575d | ||
![]() |
2b8954353d | ||
![]() |
9bd5aa0da4 | ||
![]() |
af2cddee91 | ||
![]() |
27bc414616 | ||
![]() |
14eaedd73a | ||
![]() |
a2effef346 | ||
![]() |
caf938f79f | ||
![]() |
8ececc11d2 | ||
![]() |
cf1d546683 | ||
![]() |
e8144f4906 | ||
![]() |
bfb6f14769 | ||
![]() |
ff1ba2b5bf | ||
![]() |
8c26f29f94 | ||
![]() |
bdd57f3b3e | ||
![]() |
e09bf4d09c | ||
![]() |
e0dbf4c2cd | ||
![]() |
4bba84af8a | ||
![]() |
bd7077c1cf | ||
![]() |
a63128bd45 | ||
![]() |
6944f4a68a | ||
![]() |
54ab0ab17e | ||
![]() |
2080bb2da1 | ||
![]() |
cc74c98509 | ||
![]() |
dd6c6ae03f | ||
![]() |
4f8ca9ef16 | ||
![]() |
53059bcb91 | ||
![]() |
cb056f4f80 | ||
![]() |
05bfa8b85e | ||
![]() |
6dc5350c43 | ||
![]() |
5cdf807d92 | ||
![]() |
9c2a9e64c2 | ||
![]() |
3b60b801c2 | ||
![]() |
c78eb80686 | ||
![]() |
9b9da648c9 | ||
![]() |
adc2b9c43a | ||
![]() |
b3954e9acd | ||
![]() |
6e36f0ef83 | ||
![]() |
64afb907e6 | ||
![]() |
3552125075 | ||
![]() |
2601bf6d81 | ||
![]() |
3da032b7ee | ||
![]() |
7bea94144e | ||
![]() |
40b08a593f | ||
![]() |
5d06e8310d | ||
![]() |
1ab82dfa32 | ||
![]() |
b93372926a | ||
![]() |
557bcc40ef | ||
![]() |
06e2e548be | ||
![]() |
7a25588995 | ||
![]() |
8107337566 | ||
![]() |
d6de11f54c | ||
![]() |
2f2334eac4 | ||
![]() |
3a5b9203d8 | ||
![]() |
c46ce1170c | ||
![]() |
1170c508b4 | ||
![]() |
f34cacbc5c | ||
![]() |
4164195fae | ||
![]() |
c03b106118 | ||
![]() |
c760a4e0ef | ||
![]() |
f3a73ecc4a | ||
![]() |
6beb36f92f | ||
![]() |
033a4ecbe8 | ||
![]() |
6360d61721 | ||
![]() |
5dd3f6cd02 | ||
![]() |
cb3c595d2b | ||
![]() |
f4414851be | ||
![]() |
9a0f61e60b | ||
![]() |
22fc690c65 | ||
![]() |
c5583bd77b | ||
![]() |
8fbee92255 | ||
![]() |
1fd6685b3b | ||
![]() |
e6fe1d2008 | ||
![]() |
c0ce14dba5 | ||
![]() |
9f315fb021 | ||
![]() |
dc46b3f6c0 | ||
![]() |
24dd94fba3 | ||
![]() |
d3d4e8c721 | ||
![]() |
990d3fc714 | ||
![]() |
9c82f0b12a | ||
![]() |
47bdd2e565 | ||
![]() |
9a5e82cb1e | ||
![]() |
2ab9db3c07 | ||
![]() |
b3fdd2b0cb | ||
![]() |
bd43efd2c2 | ||
![]() |
36babcaf36 | ||
![]() |
45be3fb0e8 | ||
![]() |
c880047c4f | ||
![]() |
66e88829dd | ||
![]() |
3add3d75a1 | ||
![]() |
8644a4542a | ||
![]() |
0b6bae6ce3 | ||
![]() |
13346ab750 | ||
![]() |
f65c08431c | ||
![]() |
4cde97e65d | ||
![]() |
049b36b1b6 | ||
![]() |
faed0958b3 | ||
![]() |
3b36b7f01b | ||
![]() |
5a2b236e71 | ||
![]() |
e5db08b0a8 | ||
![]() |
e29eeb5d3d | ||
![]() |
6dac88c394 | ||
![]() |
580a0069dc | ||
![]() |
187d65ffa5 | ||
![]() |
7b0ef1824f | ||
![]() |
404017cba3 | ||
![]() |
dd2398efad | ||
![]() |
a44518a757 | ||
![]() |
83eb83025a | ||
![]() |
464a113f11 | ||
![]() |
25a776cc93 | ||
![]() |
7d19fb878d | ||
![]() |
f5aef6879a | ||
![]() |
29014d7b4a | ||
![]() |
9668a78732 | ||
![]() |
a1aafb17c9 | ||
![]() |
9883678fd9 | ||
![]() |
ba72379aa9 | ||
![]() |
3206fef865 | ||
![]() |
06b6216b9d | ||
![]() |
5458606abe | ||
![]() |
ad5cf99d9e | ||
![]() |
0445086e67 | ||
![]() |
51641dcc9a | ||
![]() |
d1e698185e | ||
![]() |
d145a3e967 | ||
![]() |
4a5190292c | ||
![]() |
1b7cece306 | ||
![]() |
181c83090d | ||
![]() |
54c32b9fe2 | ||
![]() |
9d5951765f | ||
![]() |
ddc3b47dfa | ||
![]() |
59523d6a08 | ||
![]() |
686f395158 | ||
![]() |
f7b7340b30 | ||
![]() |
9bcdad0218 | ||
![]() |
ff4601f487 | ||
![]() |
535cebde51 | ||
![]() |
ed23faa455 | ||
![]() |
0c695d721d | ||
![]() |
d7a208dcee | ||
![]() |
3eb2a26e4e | ||
![]() |
cc2d365e5a | ||
![]() |
76ac2cc58e | ||
![]() |
aee26fcffc | ||
![]() |
685eebeb56 | ||
![]() |
f23ae091cc | ||
![]() |
1421dca35f | ||
![]() |
39c2f31a22 | ||
![]() |
239ef1c238 | ||
![]() |
466ba93750 | ||
![]() |
72007a0162 | ||
![]() |
26c0445b83 | ||
![]() |
6f6c1704d4 | ||
![]() |
14aa6de422 | ||
![]() |
eeb770ffe3 | ||
![]() |
382ac3470b | ||
![]() |
3abfb08090 | ||
![]() |
b4aac839c9 | ||
![]() |
da984c23df | ||
![]() |
cab770159d | ||
![]() |
7c2ff977d8 | ||
![]() |
5bd9334f8f | ||
![]() |
c5544df64c | ||
![]() |
c85e3c07d6 | ||
![]() |
674e1c0519 | ||
![]() |
7154a1edb8 | ||
![]() |
be1252e0e6 | ||
![]() |
a4ce6c707c | ||
![]() |
affce74b84 | ||
![]() |
730de4061f | ||
![]() |
3beafa2a74 | ||
![]() |
c622923edd | ||
![]() |
6940021293 | ||
![]() |
0156a4f39e | ||
![]() |
4bae12aa55 | ||
![]() |
f08b1224c9 | ||
![]() |
477355db8f | ||
![]() |
11c89165c5 | ||
![]() |
825f28ab9a | ||
![]() |
54ff5e1dc6 | ||
![]() |
9b46418628 | ||
![]() |
04597a9faf | ||
![]() |
5b0994dc85 | ||
![]() |
7c852c69a3 | ||
![]() |
df47e94ceb | ||
![]() |
3b68004005 | ||
![]() |
5a9c327938 | ||
![]() |
3e31e9783c | ||
![]() |
46fb3639ec | ||
![]() |
a6eba57099 | ||
![]() |
c8481f961a | ||
![]() |
56329f43fb | ||
![]() |
793fbfb5be | ||
![]() |
1d8334b762 | ||
![]() |
19330ac415 | ||
![]() |
7a015a0bda | ||
![]() |
f29c422c61 | ||
![]() |
99a369f604 | ||
![]() |
c1f0fb36ac | ||
![]() |
fa0a8905f7 | ||
![]() |
4e63a3269e | ||
![]() |
0f1873e295 | ||
![]() |
23fd28afd5 | ||
![]() |
ad5a813a9a | ||
![]() |
f245eedbdf | ||
![]() |
1ce6a6e8c5 | ||
![]() |
0ea7b5526c | ||
![]() |
b41e88f8f3 | ||
![]() |
82b9e79d99 | ||
![]() |
a5383fadb1 | ||
![]() |
bd7fb9bbe4 | ||
![]() |
1ddd0a333c | ||
![]() |
084fec08a6 | ||
![]() |
2b51448b49 | ||
![]() |
f4eee83477 | ||
![]() |
cd622c9e06 | ||
![]() |
7077ebfde2 | ||
![]() |
4862fecb12 | ||
![]() |
c189933705 | ||
![]() |
9c3f7a9139 | ||
![]() |
382bf5e936 | ||
![]() |
e2fac962f3 | ||
![]() |
3071ebc0d5 | ||
![]() |
a5fc6db1fa | ||
![]() |
8060c6a775 | ||
![]() |
2a6e7f300c | ||
![]() |
98afe79eaa | ||
![]() |
a35590f9ea | ||
![]() |
f14f8c35b8 | ||
![]() |
aa5c510c99 | ||
![]() |
59f33a8def | ||
![]() |
dbb4df598c | ||
![]() |
8452f52da0 | ||
![]() |
db6613f562 | ||
![]() |
44d2775437 | ||
![]() |
a3326dc598 | ||
![]() |
0cd56ddeb8 | ||
![]() |
2a7f729e73 | ||
![]() |
18301d8f8b | ||
![]() |
8286437055 | ||
![]() |
1bef7fbbf3 | ||
![]() |
21e8318643 | ||
![]() |
381f054daf | ||
![]() |
c05d9303a9 | ||
![]() |
cca72a9e4e | ||
![]() |
d4463e5f30 | ||
![]() |
92155e2154 | ||
![]() |
287fd0bf1e | ||
![]() |
9e910d5501 | ||
![]() |
ff54b4d0c9 | ||
![]() |
af0b841bc3 | ||
![]() |
665ea85613 | ||
![]() |
de635392c6 | ||
![]() |
7814cca3d5 | ||
![]() |
6c7204eae0 | ||
![]() |
834d647011 | ||
![]() |
d872263b55 | ||
![]() |
4f8e4ca0ad | ||
![]() |
2abc9d0210 | ||
![]() |
36fb942ce6 | ||
![]() |
56476b35e3 | ||
![]() |
38b3835891 | ||
![]() |
ccf5be116a | ||
![]() |
794ae4c5da | ||
![]() |
060e744924 | ||
![]() |
de62ed772f | ||
![]() |
6a8c4a65c5 | ||
![]() |
03738aeb27 | ||
![]() |
243cb8569e | ||
![]() |
1bd660fbbe | ||
![]() |
fec80b39f0 | ||
![]() |
21768432c8 | ||
![]() |
e9b900ff28 | ||
![]() |
c57cb8fec1 | ||
![]() |
247681e3ef | ||
![]() |
2f9142419a | ||
![]() |
b84eb3df7f | ||
![]() |
4058ec2ee9 | ||
![]() |
23a9061871 | ||
![]() |
9e95ca10b2 | ||
![]() |
4c0809d3d3 | ||
![]() |
d43365f6e6 | ||
![]() |
c6ccc2b20d | ||
![]() |
31dd68be1d | ||
![]() |
1c94620c06 | ||
![]() |
82d214faa6 | ||
![]() |
04b2e3689c | ||
![]() |
f00b8a3941 | ||
![]() |
390cc9cfc9 | ||
![]() |
8259872e2d | ||
![]() |
1a3aaf86ee | ||
![]() |
cade4f932d | ||
![]() |
eb060602cd | ||
![]() |
805f046696 | ||
![]() |
35e11e43de | ||
![]() |
ba15c6dc60 | ||
![]() |
569c227a99 | ||
![]() |
8fd7599158 | ||
![]() |
19418e5dfb | ||
![]() |
f90a163ede | ||
![]() |
8fb1fd3602 | ||
![]() |
0dbf2a347f | ||
![]() |
38742fd5e8 | ||
![]() |
67ce7e0979 | ||
![]() |
21a7e52f9a | ||
![]() |
fcb445a381 | ||
![]() |
f6450d4b4d | ||
![]() |
a01d1b89b6 | ||
![]() |
0c9b6582cc | ||
![]() |
2d47daabf8 | ||
![]() |
ce20cbe435 | ||
![]() |
99e5415bfc | ||
![]() |
b2d935dd6d | ||
![]() |
eb66cc5db8 | ||
![]() |
6d6b8363a8 | ||
![]() |
bf79b02e15 | ||
![]() |
3ce7eda3eb | ||
![]() |
378e6b6547 | ||
![]() |
f63b35e2c0 | ||
![]() |
9a480cbe3e | ||
![]() |
76ca937bb8 | ||
![]() |
8a29567572 | ||
![]() |
839cd7d1c7 | ||
![]() |
0bfc7a9177 | ||
![]() |
26e11f96e0 | ||
![]() |
86c36acedc | ||
![]() |
2318ad2bde | ||
![]() |
9548dfabd6 | ||
![]() |
0c716c12d7 | ||
![]() |
08dd176753 | ||
![]() |
07086bfb3e | ||
![]() |
b1d2e64450 | ||
![]() |
d9cd928100 | ||
![]() |
37ec26c8fd | ||
![]() |
68b7d9cdff | ||
![]() |
3aecd15916 | ||
![]() |
97d76aee18 | ||
![]() |
781bf8e7ec | ||
![]() |
77b9457707 | ||
![]() |
1210ab0de0 | ||
![]() |
3c93c4714e | ||
![]() |
f90a1ede70 | ||
![]() |
028354b283 | ||
![]() |
18493a578d | ||
![]() |
1829dc79c8 | ||
![]() |
7575e8fbe3 | ||
![]() |
eed9915c12 | ||
![]() |
be71e45954 | ||
![]() |
3a7978eca0 | ||
![]() |
c37d2250d4 | ||
![]() |
45819d1cd4 | ||
![]() |
4ac36af40c | ||
![]() |
1a2840b33f | ||
![]() |
d7e75e6011 | ||
![]() |
73316b87a3 | ||
![]() |
46402691b0 | ||
![]() |
e7cef4549f | ||
![]() |
737a41f45b | ||
![]() |
045ca40a77 | ||
![]() |
b1fe197c11 | ||
![]() |
8888530ae3 | ||
![]() |
2d51c7428e | ||
![]() |
863e2a80a2 | ||
![]() |
41d17d2a47 | ||
![]() |
36934468d6 | ||
![]() |
5029ce8728 | ||
![]() |
e6ab24bcb4 | ||
![]() |
f3bd263ada | ||
![]() |
db7ab3ffce | ||
![]() |
85c3755b96 | ||
![]() |
5decd55551 | ||
![]() |
bc468b6f36 | ||
![]() |
369d9204d9 | ||
![]() |
7caf7be97e | ||
![]() |
64c423902a | ||
![]() |
27a2dee3bd | ||
![]() |
11d3aeb0dd | ||
![]() |
f54d8d318a | ||
![]() |
210f2ef452 | ||
![]() |
d0bab6183a | ||
![]() |
3441aceba3 | ||
![]() |
0908b9cd76 | ||
![]() |
67494ad4c4 | ||
![]() |
5d8f75beb4 | ||
![]() |
8e7fde99db | ||
![]() |
bfdf165584 | ||
![]() |
9427ebd489 | ||
![]() |
e4f753ae82 | ||
![]() |
f2d9d3c2d7 | ||
![]() |
04c5f31cc1 | ||
![]() |
4ea86b714e | ||
![]() |
cc0b96cba4 | ||
![]() |
9e176f8400 | ||
![]() |
7195ff349b | ||
![]() |
8048ad343e | ||
![]() |
799a27ec84 | ||
![]() |
c7c77ab20c | ||
![]() |
8fc113cc52 | ||
![]() |
c7679bec87 | ||
![]() |
3301d8b4fb | ||
![]() |
f5892093a9 | ||
![]() |
b06238ba5d | ||
![]() |
dddcc80f30 | ||
![]() |
8854c8c9d0 | ||
![]() |
d02f441eb0 | ||
![]() |
ff89dd00b6 | ||
![]() |
7041e63268 | ||
![]() |
8126fdcd15 | ||
![]() |
2d61a2f251 | ||
![]() |
7594ee9dbe | ||
![]() |
0862a38599 | ||
![]() |
bf7dc462e8 | ||
![]() |
65b6aaec8e | ||
![]() |
e08aa14eab | ||
![]() |
851028997a | ||
![]() |
a1479d04df | ||
![]() |
d12af16f46 | ||
![]() |
2edfcb78fe | ||
![]() |
3f0947fa5b | ||
![]() |
d2b808e540 | ||
![]() |
2995a7dc8f | ||
![]() |
819db0a30b | ||
![]() |
4d727245e1 | ||
![]() |
d8281aeb34 | ||
![]() |
cd0f2061b5 | ||
![]() |
96928d46ca | ||
![]() |
6d55ac2199 | ||
![]() |
80dae6ece7 | ||
![]() |
a1a12ca9f7 | ||
![]() |
5a594173fa | ||
![]() |
1e989945b9 | ||
![]() |
679bef849c | ||
![]() |
1c17be9760 | ||
![]() |
6def0e3115 | ||
![]() |
fd3436d5c0 | ||
![]() |
a94f9fd3e5 | ||
![]() |
77850464d4 | ||
![]() |
3e9edba189 | ||
![]() |
3d168542fe | ||
![]() |
0de00e26d8 | ||
![]() |
f0705c612e | ||
![]() |
648b9b5d02 | ||
![]() |
b15a0b92f9 | ||
![]() |
80482c0578 | ||
![]() |
16701923a1 | ||
![]() |
67cee06523 | ||
![]() |
685dab39af | ||
![]() |
0ff9555cc4 | ||
![]() |
4f808dd17d | ||
![]() |
69d71dac36 | ||
![]() |
4880319991 | ||
![]() |
13b9850b39 | ||
![]() |
366f645eda | ||
![]() |
dcf7190c90 | ||
![]() |
ae6647276c | ||
![]() |
460ff37f7a | ||
![]() |
e7ef913416 | ||
![]() |
c149050a3a | ||
![]() |
a4e5ca54db | ||
![]() |
cb81fd3353 | ||
![]() |
3a8611ebf8 | ||
![]() |
352a883b5d | ||
![]() |
5247b22ef4 | ||
![]() |
1bf00e80b0 | ||
![]() |
6331d9b7a4 | ||
![]() |
0deb0ad851 | ||
![]() |
3b42041c4e | ||
![]() |
d8987aa94a | ||
![]() |
19ed16efc6 | ||
![]() |
0e32d70aef | ||
![]() |
5b71f279fd | ||
![]() |
6d170ffb16 | ||
![]() |
72d90374a0 | ||
![]() |
fc8160acda | ||
![]() |
751ffb9de9 | ||
![]() |
60d636940d | ||
![]() |
7a5cca519a | ||
![]() |
1e93d06a25 | ||
![]() |
4341f8aaec | ||
![]() |
46022d60f3 | ||
![]() |
80ddc76926 | ||
![]() |
bd999b4b0a | ||
![]() |
4cdc387338 | ||
![]() |
df258a0003 | ||
![]() |
7cc1c0fbdd | ||
![]() |
42644c956b | ||
![]() |
00eaedcbfa | ||
![]() |
1ff5a97c85 | ||
![]() |
241414f81b | ||
![]() |
1bf046a8ba | ||
![]() |
61471fdd3c | ||
![]() |
a0524fb136 | ||
![]() |
fa39389a64 | ||
![]() |
697a24e699 | ||
![]() |
cf3bb87a54 | ||
![]() |
14fb7d8a7a | ||
![]() |
d097363b24 | ||
![]() |
bad576c23d | ||
![]() |
8d9e4e7442 | ||
![]() |
431d03c63f | ||
![]() |
24321731d9 | ||
![]() |
fddcade1fb | ||
![]() |
a0aa7dcdc1 | ||
![]() |
d3e9f354b3 | ||
![]() |
e958334406 | ||
![]() |
a42029970d | ||
![]() |
2108e09e13 | ||
![]() |
8c010093e8 | ||
![]() |
adc98be441 | ||
![]() |
fb942912db | ||
![]() |
7f12b58722 | ||
![]() |
05d58f8f98 | ||
![]() |
46c2db310a | ||
![]() |
607408b9b9 | ||
![]() |
b81e8cb81a | ||
![]() |
44ef04d90a | ||
![]() |
3e9d84b109 | ||
![]() |
aa2d8d4833 | ||
![]() |
55f63b948b | ||
![]() |
cece543d6b | ||
![]() |
9204a89319 | ||
![]() |
f8ed96bb25 | ||
![]() |
54d318bf04 | ||
![]() |
f152d66cd8 | ||
![]() |
576786c751 | ||
![]() |
a6b7cd3202 | ||
![]() |
ea9caaaaf0 | ||
![]() |
22d8f434be | ||
![]() |
8360c10141 | ||
![]() |
750dc6f2cc | ||
![]() |
47b556544d | ||
![]() |
f6cee739a6 | ||
![]() |
d1afe0028c | ||
![]() |
a4cace1ef7 | ||
![]() |
707ac8be27 | ||
![]() |
2f2254966a | ||
![]() |
eb57675f55 | ||
![]() |
dde93c5ccf | ||
![]() |
886b5959f7 | ||
![]() |
dc44546ac7 | ||
![]() |
42c6698732 | ||
![]() |
bd014a107f | ||
![]() |
3a7298bb99 | ||
![]() |
aa06e3490d | ||
![]() |
ece889b36b | ||
![]() |
9848f19ce6 | ||
![]() |
e59b087057 | ||
![]() |
5b451d1ac7 | ||
![]() |
f050c05b3c | ||
![]() |
06b8edefbf | ||
![]() |
f3a2a28398 | ||
![]() |
9b0a1fc2ec | ||
![]() |
c87ab234eb | ||
![]() |
68468756a8 | ||
![]() |
9016df0195 | ||
![]() |
7acece9705 | ||
![]() |
d1896c23c0 | ||
![]() |
dae19f03e0 | ||
![]() |
9dafccf0f7 | ||
![]() |
5f270c41ae | ||
![]() |
f9f80e9003 | ||
![]() |
c5063d4269 | ||
![]() |
ccbe18ec1c | ||
![]() |
321a8a8b25 | ||
![]() |
77a9560376 | ||
![]() |
058a039a82 | ||
![]() |
7c744703e4 | ||
![]() |
a934cbb085 | ||
![]() |
cf4158c0d0 | ||
![]() |
dc56eab9b6 | ||
![]() |
37d1f59132 | ||
![]() |
ab0ce55411 | ||
![]() |
c1d66596d1 | ||
![]() |
cbfccdf0d3 | ||
![]() |
9362037177 | ||
![]() |
e25c93bae2 | ||
![]() |
367c434010 | ||
![]() |
02d8463e15 | ||
![]() |
9d5a1d5c43 | ||
![]() |
c8d94f541f | ||
![]() |
27d06eaa6b | ||
![]() |
7f32857e00 | ||
![]() |
2f060f0f52 | ||
![]() |
f89d405226 | ||
![]() |
fd4459e570 | ||
![]() |
eb0df2b101 | ||
![]() |
6c178cfb7e | ||
![]() |
8ced68430d | ||
![]() |
0aade598ff | ||
![]() |
95949fd1ab | ||
![]() |
1a56382112 | ||
![]() |
d610e4b19b | ||
![]() |
fc44d9e36e | ||
![]() |
c07686576a | ||
![]() |
c2400aea4d | ||
![]() |
fb4bf0dde4 | ||
![]() |
e4f638d1ce | ||
![]() |
5c492c01a1 | ||
![]() |
f451e11f82 | ||
![]() |
95b73f35f7 | ||
![]() |
58147e9e12 | ||
![]() |
a8830e2ede | ||
![]() |
9804bb95cc | ||
![]() |
0da1aef763 | ||
![]() |
0a334804a3 | ||
![]() |
94d2f03e9b | ||
![]() |
9127f7f0c2 | ||
![]() |
0bb0226bc2 | ||
![]() |
b3a1a5dcc2 | ||
![]() |
984dd1cc25 | ||
![]() |
5663e543a4 | ||
![]() |
d3879a0398 | ||
![]() |
6bd2468d44 | ||
![]() |
e63d43151b | ||
![]() |
0265da4ae6 | ||
![]() |
ef255d12ae | ||
![]() |
eeb612f9a2 | ||
![]() |
dfcb4edb81 | ||
![]() |
d3500e9036 | ||
![]() |
adcb8c6469 | ||
![]() |
592eee7d3d | ||
![]() |
7dadb2b26c | ||
![]() |
7cbb135f28 | ||
![]() |
966ac0673c | ||
![]() |
d715eae0d1 | ||
![]() |
ccdd13d136 | ||
![]() |
efe5de4c75 | ||
![]() |
2a93e9bd2e | ||
![]() |
28dd53ae50 | ||
![]() |
3c1e64d8dc | ||
![]() |
4fe3cb2bca | ||
![]() |
b31490c4e3 | ||
![]() |
5533f6ba86 | ||
![]() |
8aa5f87a1c | ||
![]() |
6deb674377 | ||
![]() |
12d1d998a3 | ||
![]() |
d90162d06f | ||
![]() |
97c924341c | ||
![]() |
e91fc225e1 | ||
![]() |
43149fd832 | ||
![]() |
78df579703 | ||
![]() |
f61b915894 | ||
![]() |
cd3f405bff | ||
![]() |
7cfdca7a81 | ||
![]() |
216063dba8 | ||
![]() |
b647bacd72 | ||
![]() |
4f77937e3e | ||
![]() |
48e299b2ac | ||
![]() |
40f00af196 | ||
![]() |
bd6cc22e63 | ||
![]() |
8760792426 | ||
![]() |
870b0bf7aa | ||
![]() |
afd0bd4318 | ||
![]() |
f829ac1d34 | ||
![]() |
86a0177855 | ||
![]() |
718d4fd0bd | ||
![]() |
365137c32b | ||
![]() |
e83ca0dfda | ||
![]() |
6a9f6ef651 | ||
![]() |
99122ccc03 | ||
![]() |
97923697e1 | ||
![]() |
68888b15e0 | ||
![]() |
f48b26067b | ||
![]() |
4bf2d5837d | ||
![]() |
4eb2d09c75 | ||
![]() |
a146c1c4b6 | ||
![]() |
2f1ea9aa5d | ||
![]() |
a90da62deb | ||
![]() |
c1c3fbdf26 | ||
![]() |
e07a824d82 | ||
![]() |
2aff660a5b | ||
![]() |
abfcbe6f0e | ||
![]() |
28bf72ed75 | ||
![]() |
21b054d4ca | ||
![]() |
34f115b322 | ||
![]() |
8b67354076 | ||
![]() |
b62e0a8b40 | ||
![]() |
f46d5376fe | ||
![]() |
dc3640578f | ||
![]() |
0a43494de5 | ||
![]() |
2544e45d2d | ||
![]() |
4a53e9e018 |
45
.github/CONTRIBUTING.md
vendored
Normal file
45
.github/CONTRIBUTING.md
vendored
Normal file
@@ -0,0 +1,45 @@
|
||||
NewPipe contribution guidelines
|
||||
===============================
|
||||
|
||||
PLEASE READ THESE GUIDELINES CAREFULLY BEFORE ANY CONTRIBUTION!
|
||||
|
||||
## Crash reporting
|
||||
|
||||
Do not report crashes in the GitHub issue tracker. NewPipe has an automated crash report system that will ask you to send a report via e-mail when a crash occurs. This contains all the data we need for debugging, and allows you to even add a comment to it. You'll see exactly what is sent, the system is 100% transparent.
|
||||
|
||||
## Issue reporting/feature requests
|
||||
|
||||
* Search the [existing issues](https://github.com/TeamNewPipe/NewPipe/issues) first to make sure your issue/feature hasn't been reported/requested before
|
||||
* Check whether your issue/feature is already fixed/implemented
|
||||
* If you are an Android/Java developer, you are always welcome to fix/implement an issue/a feature yourself. PRs welcome!
|
||||
* 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.
|
||||
|
||||
## 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 tnp@newpipe.schabi.org to let me 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.
|
||||
|
||||
## Translation
|
||||
|
||||
* NewPipe can be translated via [Weblate](https://hosted.weblate.org/projects/newpipe/strings/). You can log in there with your GitHub account.
|
||||
|
||||
## Code contribution
|
||||
|
||||
* Stick to NewPipe's style conventions (well, just look the other code and then do it the same way :))
|
||||
* Do not bring non-free software (e.g., binary blobs) into the project. Also, make sure you do not introduce Google libraries.
|
||||
* 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 may then send your changes as a pull request on GitHub. Patches to the email address mentioned in this document might not be considered, GitHub is the primary platform.
|
||||
* 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).
|
||||
* 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!
|
||||
* 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, but if not, you are asked to merge the master branch manually and resolve the problems on your own. That will make the maintainers' jobs way easier.
|
||||
* 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 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.
|
||||
* 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.
|
||||
|
||||
## 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: [#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 tnp(at)schabi.org. Please do not send issue reports, they will be ignored and remain unanswered! Use the GitHub issue tracker described above!
|
||||
* Feel free to post suggestions, changes, ideas etc. on GitHub, IRC or the mailing list!
|
2
.github/ISSUE_TEMPLATE.md
vendored
Normal file
2
.github/ISSUE_TEMPLATE.md
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
- [ ] 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.
|
1
.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
1
.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
@@ -0,0 +1 @@
|
||||
- [ ] I carefully read the [contribution guidelines](https://github.com/TeamNewPipe/NewPipe/blob/HEAD/.github/CONTRIBUTING.md) and agree to them.
|
4
.gitignore
vendored
4
.gitignore
vendored
@@ -7,3 +7,7 @@
|
||||
/app/app.iml
|
||||
/.idea
|
||||
/*.iml
|
||||
gradle.properties
|
||||
*~
|
||||
.weblate
|
||||
*.class
|
||||
|
0
.gitmodules
vendored
Normal file
0
.gitmodules
vendored
Normal file
30
.travis.yml
30
.travis.yml
@@ -1,30 +1,18 @@
|
||||
language: android
|
||||
jdk:
|
||||
- oraclejdk8
|
||||
android:
|
||||
components:
|
||||
# The BuildTools version used by NewPipe
|
||||
- tools
|
||||
- build-tools-23.0.2
|
||||
- build-tools-27.0.1
|
||||
|
||||
# The SDK version used to compile NewPipe
|
||||
- android-23
|
||||
- android-27
|
||||
|
||||
# Additional components
|
||||
- extra-android-support
|
||||
- extra-android-m2repository
|
||||
before_install:
|
||||
- yes | sdkmanager "platforms;android-27"
|
||||
script: ./gradlew -Dorg.gradle.jvmargs=-Xmx1536m assembleDebug lintDebug testDebugUnitTest
|
||||
|
||||
# Emulators
|
||||
- sys-img-armeabi-v7a-android-21
|
||||
- sys-img-armeabi-v7a-android-19
|
||||
- sys-img-armeabi-v7a-android-15
|
||||
|
||||
env:
|
||||
global:
|
||||
- ADB_INSTALL_TIMEOUT=8 # minutes (2 by default)
|
||||
matrix:
|
||||
- ANDROID_TARGET=android-19 ANDROID_ABI=armeabi-v7a
|
||||
|
||||
before_script:
|
||||
- echo no | android create avd --force -n test -t $ANDROID_TARGET --abi $ANDROID_ABI
|
||||
- emulator -avd test -no-skin -no-audio -no-window &
|
||||
- android-wait-for-emulator
|
||||
- adb shell input keyevent 82 &
|
||||
licenses:
|
||||
- '.+'
|
||||
|
BIN
CCC_NewPipe_presentation.pdf
Normal file
BIN
CCC_NewPipe_presentation.pdf
Normal file
Binary file not shown.
170
CheckTranslations.java
Normal file
170
CheckTranslations.java
Normal file
@@ -0,0 +1,170 @@
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.FileReader;
|
||||
import java.io.IOException;
|
||||
import java.util.regex.*;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.ArrayList;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.charset.Charset;
|
||||
|
||||
public final class CheckTranslations {
|
||||
|
||||
private static boolean debug = false;
|
||||
private static boolean plurals = false;
|
||||
private static boolean empty = false;
|
||||
private static boolean remove = false;
|
||||
private static int checks = 0;
|
||||
private static int matches = 0;
|
||||
private static int changes = 0;
|
||||
private static Pattern p, pb, pe, e, o;
|
||||
|
||||
/**
|
||||
* Search translated strings.xml files for empty item / plural tags
|
||||
* and remove them.
|
||||
* @param args directories which contain string.xml files (in any subdirectory)
|
||||
* -e option to find all empty string tags
|
||||
* -p option to find all empty plurals and item tags
|
||||
* -r option to remove all occurrences from the files
|
||||
* -d option to see more details
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
if (args.length < 1 || (args[0].equals("-d") && args.length < 2)) {
|
||||
System.out.println("Not enough arguments");
|
||||
return;
|
||||
}
|
||||
for (int i = 0; i < args.length; i++) {
|
||||
switch (args[i]) {
|
||||
case "-d":
|
||||
debug = true;
|
||||
break;
|
||||
case "-p":
|
||||
plurals = true;
|
||||
break;
|
||||
case "-e":
|
||||
empty = true;
|
||||
break;
|
||||
case "-r":
|
||||
remove = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!plurals && !empty) {
|
||||
plurals = true;
|
||||
empty = true;
|
||||
}
|
||||
|
||||
p = Pattern.compile("(<item quantity=\")(zero|one|two|three|few|many|other)(\"></item>|\"/>)");
|
||||
pb = Pattern.compile("(<plurals[\\sa-zA-Z=\"]*>)");
|
||||
pe = Pattern.compile("(</plurals>)");
|
||||
e = Pattern.compile("(<string[\\sa-z_\\\"=]*)((><\\/string>|\\/>){1})");
|
||||
o = Pattern.compile("(<item quantity=\"other\">)[^</>]*(<\\/item>)");
|
||||
|
||||
for (int i = 0; i < args.length; i++) {
|
||||
if (!args[i].equals("-d") && !args[i].equals("-p") && !args[i].equals("-e") && !args[i].equals("-r")) {
|
||||
File f = new File(args[i]);
|
||||
if (f.exists() && !f.isDirectory()) {
|
||||
checkFile(f);
|
||||
} else if (f.isDirectory()) {
|
||||
checkFiles(f.listFiles());
|
||||
} else {
|
||||
System.out.println("'" + args[i] + "' does not exist!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
System.out.println(checks + " files were checked.");
|
||||
System.out.println(matches + " corrupt lines detected.");
|
||||
if (remove) {
|
||||
System.out.println(matches + " corrupt lines removed and " + changes + " lines fixed.");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private static void checkFiles(File[] f) {
|
||||
for (int i = 0; i < f.length; i++) {
|
||||
if (f[i].exists() && !f[i].isDirectory()) {
|
||||
if (f[i].toString().contains("strings.xml")) {
|
||||
checkFile(f[i]);
|
||||
}
|
||||
} else if (f[i].isDirectory()) {
|
||||
checkFiles(f[i].listFiles());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void checkFile(File f) {
|
||||
// Do not check our original English strings to cause no unwanted changes
|
||||
// Btw. there should not be empty plural/item tags
|
||||
if (f.toString().contains("values/strings.xml")) {
|
||||
return;
|
||||
}
|
||||
if (debug) System.out.println("Checking " + f.toString());
|
||||
checks++;
|
||||
|
||||
|
||||
List<String> lines = new ArrayList<String>();
|
||||
boolean checkFailed = false;
|
||||
boolean otherDetected = false;
|
||||
boolean inPlurals = false;
|
||||
try (BufferedReader br = new BufferedReader(new FileReader(f))) {
|
||||
String line;
|
||||
int ln = 0;
|
||||
while ((line = br.readLine()) != null) {
|
||||
ln++;
|
||||
if (plurals && p.matcher(line).find()) {
|
||||
matches++;
|
||||
if (debug) System.out.println(" Line " + ln + " was " + ((remove) ? "removed" : "detected") + ": '" + line + "'");
|
||||
checkFailed = true;
|
||||
} else if (empty && e.matcher(line).find()) {
|
||||
matches++;
|
||||
checkFailed = true;
|
||||
if (debug) System.out.println(" Line " + ln + " was " + ((remove) ? "removed" : "detected") + ": '" + line + "'");
|
||||
} else {
|
||||
if (remove) lines.add(line);
|
||||
}
|
||||
}
|
||||
br.close();
|
||||
int pluralsLine = 0;
|
||||
for (int i = 0; i < lines.size(); i++) {
|
||||
if (o.matcher(lines.get(i)).find()) {
|
||||
otherDetected = true;
|
||||
}
|
||||
if (plurals && pb.matcher(lines.get(i)).find()) {
|
||||
inPlurals = true;
|
||||
pluralsLine = i;
|
||||
} else if (plurals && pe.matcher(lines.get(i)).find()) {
|
||||
inPlurals = false;
|
||||
if (!otherDetected) {
|
||||
boolean b = false;
|
||||
check: for(int j = pluralsLine; j < i; j++) {
|
||||
if (lines.get(j).contains("many")) {
|
||||
b = true;
|
||||
pluralsLine = j;
|
||||
break check;
|
||||
}
|
||||
}
|
||||
if (remove && b) {
|
||||
if (debug) System.out.println(" Line " + (pluralsLine + 1) + " was " + ((remove) ? "changed" : "detected") + ": '" + lines.get(pluralsLine) + "'");
|
||||
lines.set(pluralsLine, lines.get(pluralsLine).replace("many", "other"));
|
||||
changes++;
|
||||
checkFailed = true;
|
||||
} else if (debug) {
|
||||
if (debug) System.out.println(" WARNING: Line " + (i + 1) + " - No <item quantity=\"other\"> found!");
|
||||
}
|
||||
}
|
||||
otherDetected = false;
|
||||
}
|
||||
|
||||
}
|
||||
if (remove && checkFailed) {
|
||||
Files.write(f.toPath(), lines, Charset.forName("UTF-8"));
|
||||
}
|
||||
} catch (IOException e) {
|
||||
System.out.println(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
97
README.md
97
README.md
@@ -1,27 +1,34 @@
|
||||
# NewPipe
|
||||
NewPipe: A free lightweight Youtube frontend for Android.
|
||||
<p align="center"><a href="https://newpipe.schabi.org"><img src="assets/new_pipe_icon_5.png" width="150"/></a></p>
|
||||
<h2 align="center"><b>NewPipe</b></h2>
|
||||
<h4 align="center">A free lightweight YouTube frontend for Android.</h4>
|
||||
<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>
|
||||
|
||||
[](http://dasochan.nl/newpipe/)
|
||||
|
||||
Project status:
|
||||
[](https://hosted.weblate.org/engage/NewPipe/)
|
||||
[](https://travis-ci.org/theScrabi/NewPipe)
|
||||
|
||||
## Get NewPipe
|
||||
|
||||
[](https://f-droid.org/repository/browse/?fdfilter=newpipe&fdid=org.schabi.newpipe)
|
||||
<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://www.gnu.org/licenses/gpl-3.0" alt="License: GPL v3"><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://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="https://www.bountysource.com/teams/newpipe" alt="Bountysource bounties"><img src="https://img.shields.io/bountysource/team/newpipe/activity.svg?colorB=cd201f"/></a>
|
||||
</p>
|
||||
<hr />
|
||||
<p align="center"><a href="#screenshots">Screenshots</a> • <a href="#description">Description</a> • <a href="#features">Features</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>
|
||||
<hr />
|
||||
WARNING: PUTTING NEWPIPE OR ANY FORK OF IT INTO GOOGLE PLAYSTORE VIOLATES THEIR TERMS OF CONDITIONS.
|
||||
|
||||
## Screenshots
|
||||
|
||||
[<img src="screenshots/screenshot_1.png" width=150>](screenshots/screenshot_1.png)
|
||||
[<img src="screenshots/screenshot_2.png" width=150>](screenshots/screenshot_2.png)
|
||||
[<img src="screenshots/screenshot_3.png" width=150>](screenshots/screenshot_3.png)
|
||||
[<img src="screenshots/screenshot_4.png" width=150>](screenshots/screenshot_4.png)
|
||||
[<img src="screenshots/screenshot_5.png" width=150>](screenshots/screenshot_5.png)
|
||||
[<img src="screenshots/screenshot_6.png" width=250>](screenshots/screenshot_6.png)
|
||||
|
||||
[](assets/screenshot_1.png)
|
||||
[](assets/screenshot_2.png)
|
||||
[<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot_1.png" width=160>](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_1.png)
|
||||
[<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot_2.png" width=160>](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_2.png)
|
||||
[<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot_3.png" width=160>](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_3.png)
|
||||
[<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot_4.png" width=160>](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_4.png)
|
||||
[<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot_5.png" width=160>](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_5.png)
|
||||
[<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot_6.png" width=160>](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_6.png)
|
||||
[<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot_7.png" width=160>](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_7.png)
|
||||
[<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot_8.png" width=160>](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_8.png)
|
||||
[<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot_9.png" width=160>](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_9.png)
|
||||
[<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot_10.png" width=160>](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_10.png)
|
||||
|
||||
## Description
|
||||
|
||||
@@ -32,35 +39,59 @@ NewPipe does not use any Google framework libraries, or the YouTube API. It only
|
||||
* Search videos
|
||||
* Display general information about a video
|
||||
* Watch YouTube videos
|
||||
* Listen to YouTube videos (experimental)
|
||||
* Listen to YouTube videos
|
||||
* Popup mode (floating player)
|
||||
* Select the streaming player to watch the video with
|
||||
* Download videos (experimental)
|
||||
* Download audio only (experimental)
|
||||
* Download videos
|
||||
* Download audio only
|
||||
* Open a video in Kodi
|
||||
* Show Next/Related videos
|
||||
* Search YouTube in a specific language
|
||||
* Watch/Block age restricted material
|
||||
* Display general information about channels
|
||||
* Search channels
|
||||
* Watch videos from a channel
|
||||
* Orbot/Tor support (not yet directly)
|
||||
* 1080p/2k/4k support
|
||||
* View history
|
||||
* Subscribe to channels
|
||||
* Search history
|
||||
* Search/Watch Playlists
|
||||
* Watch as queues Playlists
|
||||
* Queuing videos
|
||||
|
||||
### Coming Features
|
||||
|
||||
* Improved Downloading
|
||||
* Multiservice support (eg. SoundCloud)
|
||||
* Bookmarks
|
||||
* View history
|
||||
* Search history
|
||||
* Search channels
|
||||
* Display general information about channels
|
||||
* Subscribe to channels
|
||||
* Watch videos from a channel
|
||||
* Search/Watch Playlists
|
||||
* Subtitles support
|
||||
* livestream support
|
||||
* ... and many more
|
||||
|
||||
### Multiservice support
|
||||
Although NewPipe only supports YouTube at the moment, it's designed to support many more streaming services. The plan is, that NewPipe will get such support by the version 2.0.
|
||||
|
||||
## Contribution
|
||||
Whether you have ideas, translation, design changes, code cleaning, or real heavy code changes, help is always welcome.
|
||||
Whether you have ideas, translations, design changes, code cleaning, or real heavy code changes, help is always welcome.
|
||||
The more is done the better it gets!
|
||||
|
||||
Join our [Slack group](http://invite.chschtsch.ml/) if you like to get involved.
|
||||
If you'd like to get involved, check our [contribution notes](.github/CONTRIBUTING.md).
|
||||
|
||||
## Donate
|
||||
If you like NewPipe we'd be happy about a donation. You can either donate via Bitcoin or BountySource. For further information about donating to NewPipe, please visit our [website](https://newpipe.schabi.org/donate/).
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td><img src="https://bitcoin.org/img/icons/logotop.svg" alt="Bitcoin" /></td>
|
||||
<td><img src="assets/bitcoin_qr_code.png" alt="Bitcoin QR Code" width="100px"/></td>
|
||||
<td><samp>16A9J59ahMRqkLSZjhYj33n9j3fMztFxnh</samp></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://www.bountysource.com/teams/newpipe"><img src="https://upload.wikimedia.org/wikipedia/commons/thumb/2/22/Bountysource.png/320px-Bountysource.png" alz="Bountysource" width="190px" /></a></td>
|
||||
<td><a href="https://www.bountysource.com/teams/newpipe"><img src="assets/bountysource_qr_code.png" alt="Visit NewPipe at bountysource.com" width="100px"/></a></td>
|
||||
<td><a href="https://www.bountysource.com/teams/newpipe/issues"><img src="https://img.shields.io/bountysource/team/newpipe/activity.svg?colorB=cd201f" height="30px" alt="Check out how many bounties you can earn." /></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
## License
|
||||
[](http://www.gnu.org/licenses/gpl-3.0.en.html)
|
||||
|
@@ -1,38 +1,99 @@
|
||||
apply plugin: 'com.android.application'
|
||||
|
||||
android {
|
||||
compileSdkVersion 23
|
||||
buildToolsVersion "23.0.2"
|
||||
compileSdkVersion 27
|
||||
buildToolsVersion '27.0.1'
|
||||
|
||||
defaultConfig {
|
||||
applicationId "org.schabi.newpipe"
|
||||
minSdkVersion 15
|
||||
targetSdkVersion 23
|
||||
versionCode 9
|
||||
versionName "0.7.0"
|
||||
targetSdkVersion 27
|
||||
versionCode 48
|
||||
versionName "0.12.0"
|
||||
|
||||
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
|
||||
vectorDrawables.useSupportLibrary = true
|
||||
}
|
||||
buildTypes {
|
||||
release {
|
||||
minifyEnabled false
|
||||
minifyEnabled true
|
||||
shrinkResources true
|
||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
debug {
|
||||
multiDexEnabled true
|
||||
|
||||
debuggable true
|
||||
applicationIdSuffix ".debug"
|
||||
}
|
||||
beta {
|
||||
minifyEnabled true
|
||||
shrinkResources true
|
||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
||||
|
||||
applicationIdSuffix ".beta"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
lintOptions {
|
||||
checkReleaseBuilds false
|
||||
// Or, if you prefer, you can continue to check for errors in release builds,
|
||||
// but continue the build even when errors are found:
|
||||
abortOnError false
|
||||
}
|
||||
compileOptions {
|
||||
sourceCompatibility JavaVersion.VERSION_1_8
|
||||
targetCompatibility JavaVersion.VERSION_1_8
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
compile fileTree(include: ['*.jar'], dir: 'libs')
|
||||
compile 'com.android.support:appcompat-v7:23.1.1'
|
||||
compile 'com.android.support:support-v4:23.1.1'
|
||||
compile 'com.android.support:design:23.1.1'
|
||||
compile 'com.android.support:cardview-v7:23.1.1'
|
||||
compile 'com.android.support:recyclerview-v7:23.1.1'
|
||||
compile 'org.jsoup:jsoup:1.8.3'
|
||||
compile 'org.mozilla:rhino:1.7.7'
|
||||
ext {
|
||||
supportLibVersion = '27.0.2'
|
||||
}
|
||||
dependencies {
|
||||
androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2') {
|
||||
exclude module: 'support-annotations'
|
||||
}
|
||||
|
||||
implementation 'com.github.TeamNewPipe:NewPipeExtractor:7716b1437815'
|
||||
|
||||
testImplementation 'junit:junit:4.12'
|
||||
testImplementation 'org.mockito:mockito-core:1.10.19'
|
||||
|
||||
implementation "com.android.support:appcompat-v7:$supportLibVersion"
|
||||
implementation "com.android.support:support-v4:$supportLibVersion"
|
||||
implementation "com.android.support:design:$supportLibVersion"
|
||||
implementation "com.android.support:recyclerview-v7:$supportLibVersion"
|
||||
implementation "com.android.support:preference-v14:$supportLibVersion"
|
||||
|
||||
implementation 'com.google.code.gson:gson:2.8.2'
|
||||
implementation 'ch.acra:acra:4.9.2'
|
||||
|
||||
implementation 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
|
||||
implementation 'de.hdodenhof:circleimageview:2.2.0'
|
||||
implementation 'com.github.nirhart:ParallaxScroll:dd53d1f9d1'
|
||||
implementation 'com.nononsenseapps:filepicker:3.0.1'
|
||||
implementation 'com.google.android.exoplayer:exoplayer:2.6.0'
|
||||
|
||||
debugImplementation 'com.facebook.stetho:stetho:1.5.0'
|
||||
debugImplementation 'com.facebook.stetho:stetho-urlconnection:1.5.0'
|
||||
debugImplementation 'com.android.support:multidex:1.0.2'
|
||||
|
||||
implementation 'io.reactivex.rxjava2:rxjava:2.1.7'
|
||||
implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
|
||||
implementation 'com.jakewharton.rxbinding2:rxbinding:2.0.0'
|
||||
|
||||
implementation 'android.arch.persistence.room:runtime:1.0.0'
|
||||
implementation 'android.arch.persistence.room:rxjava2:1.0.0'
|
||||
annotationProcessor 'android.arch.persistence.room:compiler:1.0.0'
|
||||
|
||||
implementation 'frankiesardo:icepick:3.2.0'
|
||||
annotationProcessor 'frankiesardo:icepick-processor:3.2.0'
|
||||
|
||||
debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.5.4'
|
||||
betaImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.4'
|
||||
releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.4'
|
||||
|
||||
implementation 'com.squareup.okhttp3:okhttp:3.9.1'
|
||||
debugImplementation 'com.facebook.stetho:stetho-okhttp3:1.5.0'
|
||||
}
|
||||
|
27
app/proguard-rules.pro
vendored
27
app/proguard-rules.pro
vendored
@@ -15,3 +15,30 @@
|
||||
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
|
||||
# public *;
|
||||
#}
|
||||
|
||||
-dontobfuscate
|
||||
-keep class org.mozilla.javascript.** { *; }
|
||||
|
||||
-keep class org.mozilla.classfile.ClassFileWriter
|
||||
-keep class com.google.android.exoplayer2.** { *; }
|
||||
|
||||
-dontwarn org.mozilla.javascript.tools.**
|
||||
-dontwarn android.arch.util.paging.CountedDataSource
|
||||
-dontwarn android.arch.persistence.room.paging.LimitOffsetDataSource
|
||||
|
||||
|
||||
# Rules for icepick. Copy paste from https://github.com/frankiesardo/icepick
|
||||
-dontwarn icepick.**
|
||||
-keep class icepick.** { *; }
|
||||
-keep class **$$Icepick { *; }
|
||||
-keepclasseswithmembernames class * {
|
||||
@icepick.* <fields>;
|
||||
}
|
||||
-keepnames class * { @icepick.State *;}
|
||||
|
||||
# Rules for OkHttp. Copy paste from https://github.com/square/okhttp
|
||||
-dontwarn okhttp3.**
|
||||
-dontwarn okio.**
|
||||
-dontwarn javax.annotation.**
|
||||
# A resource is loaded with a relative path so the package of this class must be preserved.
|
||||
-keepnames class okhttp3.internal.publicsuffix.PublicSuffixDatabase
|
||||
|
@@ -0,0 +1,37 @@
|
||||
package org.schabi.newpipe.report;
|
||||
|
||||
import android.os.Parcel;
|
||||
import android.support.test.filters.LargeTest;
|
||||
import android.support.test.runner.AndroidJUnit4;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.schabi.newpipe.R;
|
||||
import org.schabi.newpipe.report.ErrorActivity.ErrorInfo;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
/**
|
||||
* Instrumented tests for {@link ErrorInfo}
|
||||
*/
|
||||
@RunWith(AndroidJUnit4.class)
|
||||
@LargeTest
|
||||
public class ErrorInfoTest {
|
||||
|
||||
@Test
|
||||
public void errorInfo_testParcelable() {
|
||||
ErrorInfo info = ErrorInfo.make(UserAction.USER_REPORT, "youtube", "request", R.string.general_error);
|
||||
// Obtain a Parcel object and write the parcelable object to it:
|
||||
Parcel parcel = Parcel.obtain();
|
||||
info.writeToParcel(parcel, 0);
|
||||
parcel.setDataPosition(0);
|
||||
ErrorInfo infoFromParcel = ErrorInfo.CREATOR.createFromParcel(parcel);
|
||||
|
||||
assertEquals(UserAction.USER_REPORT, infoFromParcel.userAction);
|
||||
assertEquals("youtube", infoFromParcel.serviceName);
|
||||
assertEquals("request", infoFromParcel.request);
|
||||
assertEquals(R.string.general_error, infoFromParcel.message);
|
||||
|
||||
parcel.recycle();
|
||||
}
|
||||
}
|
10
app/src/beta/AndroidManifest.xml
Normal file
10
app/src/beta/AndroidManifest.xml
Normal file
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools">
|
||||
|
||||
<application
|
||||
android:label="NewPipe Beta"
|
||||
tools:replace="android:label">
|
||||
</application>
|
||||
|
||||
</manifest>
|
BIN
app/src/beta/res/mipmap-hdpi/ic_launcher.png
Normal file
BIN
app/src/beta/res/mipmap-hdpi/ic_launcher.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 5.8 KiB |
BIN
app/src/beta/res/mipmap-mdpi/ic_launcher.png
Normal file
BIN
app/src/beta/res/mipmap-mdpi/ic_launcher.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.0 KiB |
BIN
app/src/beta/res/mipmap-xhdpi/ic_launcher.png
Normal file
BIN
app/src/beta/res/mipmap-xhdpi/ic_launcher.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 8.1 KiB |
BIN
app/src/beta/res/mipmap-xxhdpi/ic_launcher.png
Normal file
BIN
app/src/beta/res/mipmap-xxhdpi/ic_launcher.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 13 KiB |
BIN
app/src/beta/res/mipmap-xxxhdpi/ic_launcher.png
Normal file
BIN
app/src/beta/res/mipmap-xxxhdpi/ic_launcher.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 19 KiB |
17
app/src/debug/AndroidManifest.xml
Normal file
17
app/src/debug/AndroidManifest.xml
Normal file
@@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
package="org.schabi.newpipe">
|
||||
|
||||
<application
|
||||
android:name=".DebugApp"
|
||||
android:label="NewPipe Debug"
|
||||
tools:replace="android:name, android:label">
|
||||
<activity
|
||||
android:name=".MainActivity"
|
||||
android:label="NewPipe Debug"
|
||||
tools:replace="android:label"/>
|
||||
</application>
|
||||
|
||||
</manifest>
|
104
app/src/debug/java/org/schabi/newpipe/DebugApp.java
Normal file
104
app/src/debug/java/org/schabi/newpipe/DebugApp.java
Normal file
@@ -0,0 +1,104 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
162
app/src/main/assets/apache2.html
Normal file
162
app/src/main/assets/apache2.html
Normal file
@@ -0,0 +1,162 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<title>Apache License - Version 2.0, January 2004</title>
|
||||
</head>
|
||||
<body>
|
||||
<p>Apache License<br>Version 2.0, January 2004<br>
|
||||
<a href="http://www.apache.org/licenses/">http://www.apache.org/licenses/</a> </p>
|
||||
<p>TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION</p>
|
||||
<p><strong><a name="definitions">1. Definitions</a></strong>.</p>
|
||||
<p>"License" shall mean the terms and conditions for use, reproduction, and
|
||||
distribution as defined by Sections 1 through 9 of this document.</p>
|
||||
<p>"Licensor" shall mean the copyright owner or entity authorized by the
|
||||
copyright owner that is granting the License.</p>
|
||||
<p>"Legal Entity" shall mean the union of the acting entity and all other
|
||||
entities that control, are controlled by, or are under common control with
|
||||
that entity. For the purposes of this definition, "control" means (i) the
|
||||
power, direct or indirect, to cause the direction or management of such
|
||||
entity, whether by contract or otherwise, or (ii) ownership of fifty
|
||||
percent (50%) or more of the outstanding shares, or (iii) beneficial
|
||||
ownership of such entity.</p>
|
||||
<p>"You" (or "Your") shall mean an individual or Legal Entity exercising
|
||||
permissions granted by this License.</p>
|
||||
<p>"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation source,
|
||||
and configuration files.</p>
|
||||
<p>"Object" form shall mean any form resulting from mechanical transformation
|
||||
or translation of a Source form, including but not limited to compiled
|
||||
object code, generated documentation, and conversions to other media types.</p>
|
||||
<p>"Work" shall mean the work of authorship, whether in Source or Object form,
|
||||
made available under the License, as indicated by a copyright notice that
|
||||
is included in or attached to the work (an example is provided in the
|
||||
Appendix below).</p>
|
||||
<p>"Derivative Works" shall mean any work, whether in Source or Object form,
|
||||
that is based on (or derived from) the Work and for which the editorial
|
||||
revisions, annotations, elaborations, or other modifications represent, as
|
||||
a whole, an original work of authorship. For the purposes of this License,
|
||||
Derivative Works shall not include works that remain separable from, or
|
||||
merely link (or bind by name) to the interfaces of, the Work and Derivative
|
||||
Works thereof.</p>
|
||||
<p>"Contribution" shall mean any work of authorship, including the original
|
||||
version of the Work and any modifications or additions to that Work or
|
||||
Derivative Works thereof, that is intentionally submitted to Licensor for
|
||||
inclusion in the Work by the copyright owner or by an individual or Legal
|
||||
Entity authorized to submit on behalf of the copyright owner. For the
|
||||
purposes of this definition, "submitted" means any form of electronic,
|
||||
verbal, or written communication sent to the Licensor or its
|
||||
representatives, including but not limited to communication on electronic
|
||||
mailing lists, source code control systems, and issue tracking systems that
|
||||
are managed by, or on behalf of, the Licensor for the purpose of discussing
|
||||
and improving the Work, but excluding communication that is conspicuously
|
||||
marked or otherwise designated in writing by the copyright owner as "Not a
|
||||
Contribution."</p>
|
||||
<p>"Contributor" shall mean Licensor and any individual or Legal Entity on
|
||||
behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.</p>
|
||||
<p><strong><a name="copyright">2. Grant of Copyright License</a></strong>. Subject to the
|
||||
terms and conditions of this License, each Contributor hereby grants to You
|
||||
a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of, publicly
|
||||
display, publicly perform, sublicense, and distribute the Work and such
|
||||
Derivative Works in Source or Object form.</p>
|
||||
<p><strong><a name="patent">3. Grant of Patent License</a></strong>. Subject to the terms
|
||||
and conditions of this License, each Contributor hereby grants to You a
|
||||
perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made, use,
|
||||
offer to sell, sell, import, and otherwise transfer the Work, where such
|
||||
license applies only to those patent claims licensable by such Contributor
|
||||
that are necessarily infringed by their Contribution(s) alone or by
|
||||
combination of their Contribution(s) with the Work to which such
|
||||
Contribution(s) was submitted. If You institute patent litigation against
|
||||
any entity (including a cross-claim or counterclaim in a lawsuit) alleging
|
||||
that the Work or a Contribution incorporated within the Work constitutes
|
||||
direct or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate as of the
|
||||
date such litigation is filed.</p>
|
||||
<p><strong><a name="redistribution">4. Redistribution</a></strong>. You may reproduce and
|
||||
distribute copies of the Work or Derivative Works thereof in any medium,
|
||||
with or without modifications, and in Source or Object form, provided that
|
||||
You meet the following conditions:</p>
|
||||
<ol style="list-style: lower-latin;">
|
||||
<li>You must give any other recipients of the Work or Derivative Works a
|
||||
copy of this License; and</li>
|
||||
|
||||
<li>You must cause any modified files to carry prominent notices stating
|
||||
that You changed the files; and</li>
|
||||
|
||||
<li>You must retain, in the Source form of any Derivative Works that You
|
||||
distribute, all copyright, patent, trademark, and attribution notices from
|
||||
the Source form of the Work, excluding those notices that do not pertain to
|
||||
any part of the Derivative Works; and</li>
|
||||
|
||||
<li>If the Work includes a "NOTICE" text file as part of its distribution,
|
||||
then any Derivative Works that You distribute must include a readable copy
|
||||
of the attribution notices contained within such NOTICE file, excluding
|
||||
those notices that do not pertain to any part of the Derivative Works, in
|
||||
at least one of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or documentation,
|
||||
if provided along with the Derivative Works; or, within a display generated
|
||||
by the Derivative Works, if and wherever such third-party notices normally
|
||||
appear. The contents of the NOTICE file are for informational purposes only
|
||||
and do not modify the License. You may add Your own attribution notices
|
||||
within Derivative Works that You distribute, alongside or as an addendum to
|
||||
the NOTICE text from the Work, provided that such additional attribution
|
||||
notices cannot be construed as modifying the License.
|
||||
<br/>
|
||||
<br/>
|
||||
You may add Your own copyright statement to Your modifications and may
|
||||
provide additional or different license terms and conditions for use,
|
||||
reproduction, or distribution of Your modifications, or for any such
|
||||
Derivative Works as a whole, provided Your use, reproduction, and
|
||||
distribution of the Work otherwise complies with the conditions stated in
|
||||
this License.
|
||||
</li>
|
||||
|
||||
</ol>
|
||||
|
||||
<p><strong><a name="contributions">5. Submission of Contributions</a></strong>. Unless You
|
||||
explicitly state otherwise, any Contribution intentionally submitted for
|
||||
inclusion in the Work by You to the Licensor shall be under the terms and
|
||||
conditions of this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify the
|
||||
terms of any separate license agreement you may have executed with Licensor
|
||||
regarding such Contributions.</p>
|
||||
<p><strong><a name="trademarks">6. Trademarks</a></strong>. This License does not grant
|
||||
permission to use the trade names, trademarks, service marks, or product
|
||||
names of the Licensor, except as required for reasonable and customary use
|
||||
in describing the origin of the Work and reproducing the content of the
|
||||
NOTICE file.</p>
|
||||
<p><strong><a name="no-warranty">7. Disclaimer of Warranty</a></strong>. Unless required by
|
||||
applicable law or agreed to in writing, Licensor provides the Work (and
|
||||
each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT
|
||||
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including,
|
||||
without limitation, any warranties or conditions of TITLE,
|
||||
NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You
|
||||
are solely responsible for determining the appropriateness of using or
|
||||
redistributing the Work and assume any risks associated with Your exercise
|
||||
of permissions under this License.</p>
|
||||
<p><strong><a name="no-liability">8. Limitation of Liability</a></strong>. In no event and
|
||||
under no legal theory, whether in tort (including negligence), contract, or
|
||||
otherwise, unless required by applicable law (such as deliberate and
|
||||
grossly negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a result
|
||||
of this License or out of the use or inability to use the Work (including
|
||||
but not limited to damages for loss of goodwill, work stoppage, computer
|
||||
failure or malfunction, or any and all other commercial damages or losses),
|
||||
even if such Contributor has been advised of the possibility of such
|
||||
damages.</p>
|
||||
<p><strong><a name="additional">9. Accepting Warranty or Additional Liability</a></strong>.
|
||||
While redistributing the Work or Derivative Works thereof, You may choose
|
||||
to offer, and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this License.
|
||||
However, in accepting such obligations, You may act only on Your own behalf
|
||||
and on Your sole responsibility, not on behalf of any other Contributor,
|
||||
and only if You agree to indemnify, defend, and hold each Contributor
|
||||
harmless for any liability incurred by, or claims asserted against, such
|
||||
Contributor by reason of your accepting any such warranty or additional
|
||||
liability.</p>
|
||||
</body>
|
||||
</html>
|
400
app/src/main/assets/gpl_2.html
Normal file
400
app/src/main/assets/gpl_2.html
Normal file
File diff suppressed because it is too large
Load Diff
639
app/src/main/assets/gpl_3.html
Normal file
639
app/src/main/assets/gpl_3.html
Normal file
File diff suppressed because it is too large
Load Diff
26
app/src/main/assets/mit.html
Normal file
26
app/src/main/assets/mit.html
Normal file
@@ -0,0 +1,26 @@
|
||||
<html>
|
||||
<head></head>
|
||||
<body>
|
||||
<p>Copyright (c) <year> <copyright holders></p>
|
||||
|
||||
<p>Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:</p>
|
||||
|
||||
<p>
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.</p>
|
||||
<p>
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.<br />
|
||||
NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.</p>
|
||||
</body>
|
||||
</html>
|
261
app/src/main/assets/mpl2.html
Normal file
261
app/src/main/assets/mpl2.html
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,10 +1,10 @@
|
||||
package org.schabi.newpipe.services;
|
||||
package org.schabi.newpipe;
|
||||
|
||||
/**
|
||||
* Created by Christian Schabesberger on 23.08.15.
|
||||
/*
|
||||
* Created by Christian Schabesberger on 24.12.15.
|
||||
*
|
||||
* Copyright (C) Christian Schabesberger 2015 <chris.schabesberger@mailbox.org>
|
||||
* StreamingService.java is part of NewPipe.
|
||||
* ActivityCommunicator.java is part of NewPipe.
|
||||
*
|
||||
* NewPipe is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -20,16 +20,20 @@ package org.schabi.newpipe.services;
|
||||
* along with NewPipe. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
public interface StreamingService {
|
||||
class ServiceInfo {
|
||||
public String name = "";
|
||||
}
|
||||
ServiceInfo getServiceInfo();
|
||||
VideoExtractor getExtractorInstance(String url);
|
||||
SearchEngine getSearchEngineInstance();
|
||||
/**
|
||||
* Singleton:
|
||||
* Used to send data between certain Activity/Services within the same process.
|
||||
* This can be considered as an ugly hack inside the Android universe. **/
|
||||
public class ActivityCommunicator {
|
||||
|
||||
/**When a VIEW_ACTION is caught this function will test if the url delivered within the calling
|
||||
Intent was meant to be watched with this Service.
|
||||
Return false if this service shall not allow to be called through ACTIONs.*/
|
||||
boolean acceptUrl(String videoUrl);
|
||||
private static ActivityCommunicator activityCommunicator;
|
||||
|
||||
public static ActivityCommunicator getCommunicator() {
|
||||
if(activityCommunicator == null) {
|
||||
activityCommunicator = new ActivityCommunicator();
|
||||
}
|
||||
return activityCommunicator;
|
||||
}
|
||||
|
||||
public volatile Class returnActivity;
|
||||
}
|
220
app/src/main/java/org/schabi/newpipe/App.java
Normal file
220
app/src/main/java/org/schabi/newpipe/App.java
Normal file
@@ -0,0 +1,220 @@
|
||||
package org.schabi.newpipe;
|
||||
|
||||
import android.app.Application;
|
||||
import android.app.NotificationChannel;
|
||||
import android.app.NotificationManager;
|
||||
import android.content.Context;
|
||||
import android.os.Build;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.util.Log;
|
||||
|
||||
import com.nostra13.universalimageloader.cache.memory.impl.LRULimitedMemoryCache;
|
||||
import com.nostra13.universalimageloader.core.ImageLoader;
|
||||
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
|
||||
import com.squareup.leakcanary.LeakCanary;
|
||||
import com.squareup.leakcanary.RefWatcher;
|
||||
|
||||
import org.acra.ACRA;
|
||||
import org.acra.config.ACRAConfiguration;
|
||||
import org.acra.config.ACRAConfigurationException;
|
||||
import org.acra.config.ConfigurationBuilder;
|
||||
import org.acra.sender.ReportSenderFactory;
|
||||
import org.schabi.newpipe.extractor.Downloader;
|
||||
import org.schabi.newpipe.extractor.NewPipe;
|
||||
import org.schabi.newpipe.report.AcraReportSenderFactory;
|
||||
import org.schabi.newpipe.report.ErrorActivity;
|
||||
import org.schabi.newpipe.report.UserAction;
|
||||
import org.schabi.newpipe.settings.SettingsActivity;
|
||||
import org.schabi.newpipe.util.ExtractorHelper;
|
||||
import org.schabi.newpipe.util.StateSaver;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InterruptedIOException;
|
||||
import java.net.SocketException;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import io.reactivex.annotations.NonNull;
|
||||
import io.reactivex.exceptions.CompositeException;
|
||||
import io.reactivex.exceptions.MissingBackpressureException;
|
||||
import io.reactivex.exceptions.OnErrorNotImplementedException;
|
||||
import io.reactivex.exceptions.UndeliverableException;
|
||||
import io.reactivex.functions.Consumer;
|
||||
import io.reactivex.plugins.RxJavaPlugins;
|
||||
|
||||
/*
|
||||
* Copyright (C) Hans-Christoph Steiner 2016 <hans@eds.org>
|
||||
* App.java is part of NewPipe.
|
||||
*
|
||||
* NewPipe is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* NewPipe is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with NewPipe. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
public class App extends Application {
|
||||
protected static final String TAG = App.class.toString();
|
||||
private RefWatcher refWatcher;
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private static final Class<? extends ReportSenderFactory>[] reportSenderFactoryClasses = new Class[]{AcraReportSenderFactory.class};
|
||||
|
||||
@Override
|
||||
protected void attachBaseContext(Context base) {
|
||||
super.attachBaseContext(base);
|
||||
|
||||
initACRA();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void 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();
|
||||
|
||||
// Initialize settings first because others inits can use its values
|
||||
SettingsActivity.initSettings(this);
|
||||
|
||||
NewPipe.init(getDownloader());
|
||||
NewPipeDatabase.init(this);
|
||||
StateSaver.init(this);
|
||||
initNotificationChannel();
|
||||
|
||||
// Initialize image loader
|
||||
ImageLoader.getInstance().init(getImageLoaderConfigurations(10, 50));
|
||||
|
||||
configureRxJavaErrorHandler();
|
||||
}
|
||||
|
||||
protected Downloader getDownloader() {
|
||||
return org.schabi.newpipe.Downloader.init(null);
|
||||
}
|
||||
|
||||
private void configureRxJavaErrorHandler() {
|
||||
// https://github.com/ReactiveX/RxJava/wiki/What's-different-in-2.0#error-handling
|
||||
RxJavaPlugins.setErrorHandler(new Consumer<Throwable>() {
|
||||
@Override
|
||||
public void accept(@NonNull Throwable throwable) throws Exception {
|
||||
Log.e(TAG, "RxJavaPlugins.ErrorHandler called with -> : " +
|
||||
"throwable = [" + throwable.getClass().getName() + "]");
|
||||
|
||||
if (throwable instanceof UndeliverableException) {
|
||||
// As UndeliverableException is a wrapper, get the cause of it to get the "real" exception
|
||||
throwable = throwable.getCause();
|
||||
}
|
||||
|
||||
final List<Throwable> errors;
|
||||
if (throwable instanceof CompositeException) {
|
||||
errors = ((CompositeException) throwable).getExceptions();
|
||||
} else {
|
||||
errors = Collections.singletonList(throwable);
|
||||
}
|
||||
|
||||
for (final Throwable error : errors) {
|
||||
if (isThrowableIgnored(error)) return;
|
||||
if (isThrowableCritical(error)) {
|
||||
reportException(error);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Out-of-lifecycle exceptions should only be reported if a debug user wishes so,
|
||||
// When exception is not reported, log it
|
||||
if (isDisposedRxExceptionsReported()) {
|
||||
reportException(throwable);
|
||||
} else {
|
||||
Log.e(TAG, "RxJavaPlugin: Undeliverable Exception received: ", throwable);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isThrowableIgnored(@NonNull final Throwable throwable) {
|
||||
// Don't crash the application over a simple network problem
|
||||
return ExtractorHelper.hasAssignableCauseThrowable(throwable,
|
||||
IOException.class, SocketException.class, // network api cancellation
|
||||
InterruptedException.class, InterruptedIOException.class); // blocking code disposed
|
||||
}
|
||||
|
||||
private boolean isThrowableCritical(@NonNull final Throwable throwable) {
|
||||
// Though these exceptions cannot be ignored
|
||||
return ExtractorHelper.hasAssignableCauseThrowable(throwable,
|
||||
NullPointerException.class, IllegalArgumentException.class, // bug in app
|
||||
OnErrorNotImplementedException.class, MissingBackpressureException.class,
|
||||
IllegalStateException.class); // bug in operator
|
||||
}
|
||||
|
||||
private void reportException(@NonNull final Throwable throwable) {
|
||||
// Throw uncaught exception that will trigger the report system
|
||||
Thread.currentThread().getUncaughtExceptionHandler()
|
||||
.uncaughtException(Thread.currentThread(), throwable);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private ImageLoaderConfiguration getImageLoaderConfigurations(final int memoryCacheSizeMb,
|
||||
final int diskCacheSizeMb) {
|
||||
return new ImageLoaderConfiguration.Builder(this)
|
||||
.memoryCache(new LRULimitedMemoryCache(memoryCacheSizeMb * 1024 * 1024))
|
||||
.diskCacheSize(diskCacheSizeMb * 1024 * 1024)
|
||||
.build();
|
||||
}
|
||||
|
||||
private void initACRA() {
|
||||
try {
|
||||
final ACRAConfiguration acraConfig = new ConfigurationBuilder(this)
|
||||
.setReportSenderFactoryClasses(reportSenderFactoryClasses)
|
||||
.setBuildConfigClass(BuildConfig.class)
|
||||
.build();
|
||||
ACRA.init(this, acraConfig);
|
||||
} catch (ACRAConfigurationException ace) {
|
||||
ace.printStackTrace();
|
||||
ErrorActivity.reportError(this, ace, null, null, ErrorActivity.ErrorInfo.make(UserAction.SOMETHING_ELSE, "none",
|
||||
"Could not initialize ACRA crash report", R.string.app_ui_crash));
|
||||
}
|
||||
}
|
||||
|
||||
public void initNotificationChannel() {
|
||||
if (Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.O) {
|
||||
return;
|
||||
}
|
||||
|
||||
final String id = getString(R.string.notification_channel_id);
|
||||
final CharSequence name = getString(R.string.notification_channel_name);
|
||||
final String description = getString(R.string.notification_channel_description);
|
||||
|
||||
// Keep this below DEFAULT to avoid making noise on every notification update
|
||||
final int importance = NotificationManager.IMPORTANCE_LOW;
|
||||
|
||||
NotificationChannel mChannel = new NotificationChannel(id, name, importance);
|
||||
mChannel.setDescription(description);
|
||||
|
||||
NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
|
||||
mNotificationManager.createNotificationChannel(mChannel);
|
||||
}
|
||||
|
||||
@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() {
|
||||
return false;
|
||||
}
|
||||
}
|
@@ -1,252 +0,0 @@
|
||||
package org.schabi.newpipe;
|
||||
|
||||
import android.app.Notification;
|
||||
import android.app.NotificationManager;
|
||||
import android.app.PendingIntent;
|
||||
import android.app.Service;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.media.AudioManager;
|
||||
import android.media.MediaPlayer;
|
||||
import android.net.wifi.WifiManager;
|
||||
import android.os.IBinder;
|
||||
import android.os.PowerManager;
|
||||
import android.support.v7.app.NotificationCompat;
|
||||
import android.util.Log;
|
||||
import android.widget.Toast;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* Created by Adam Howard on 08/11/15.
|
||||
* Copyright (c) Adam Howard <achdisposable1@gmail.com> 2015
|
||||
*
|
||||
* BackgroundPlayer.java is part of NewPipe.
|
||||
*
|
||||
* NewPipe is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* NewPipe is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with NewPipe. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**Plays the audio stream of videos in the background.*/
|
||||
public class BackgroundPlayer extends Service /*implements MediaPlayer.OnPreparedListener*/ {
|
||||
|
||||
private static final String TAG = BackgroundPlayer.class.toString();
|
||||
private static final String ACTION_STOP = TAG+".STOP";
|
||||
private static final String ACTION_PLAYPAUSE = TAG+".PLAYPAUSE";
|
||||
|
||||
public BackgroundPlayer() {
|
||||
super();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate() {
|
||||
/*PendingIntent pi = PendingIntent.getActivity(this, 0,
|
||||
new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);*/
|
||||
super.onCreate();
|
||||
}
|
||||
@Override
|
||||
public int onStartCommand(Intent intent, int flags, int startId) {
|
||||
Toast.makeText(this, "Playing in background", Toast.LENGTH_SHORT).show();//todo:translation string
|
||||
|
||||
String source = intent.getDataString();
|
||||
//Log.i(TAG, "backgroundPLayer source:"+source);
|
||||
String videoTitle = intent.getStringExtra("title");
|
||||
|
||||
//do nearly everything in a separate thread
|
||||
PlayerThread player = new PlayerThread(source, videoTitle, this);
|
||||
player.start();
|
||||
|
||||
// If we get killed after returning here, don't restart
|
||||
return START_NOT_STICKY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IBinder onBind(Intent intent) {
|
||||
// We don't provide binding (yet?), so return null
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
//Toast.makeText(this, "service done", Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
|
||||
private class PlayerThread extends Thread {
|
||||
MediaPlayer mediaPlayer;
|
||||
private String source;
|
||||
private String title;
|
||||
private int noteID = TAG.hashCode();
|
||||
private BackgroundPlayer owner;
|
||||
private NotificationManager noteMgr;
|
||||
private NotificationCompat.Builder noteBuilder;
|
||||
private WifiManager.WifiLock wifiLock;
|
||||
|
||||
public PlayerThread(String src, String title, BackgroundPlayer owner) {
|
||||
this.source = src;
|
||||
this.title = title;
|
||||
this.owner = owner;
|
||||
mediaPlayer = new MediaPlayer();
|
||||
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
|
||||
}
|
||||
@Override
|
||||
public void run() {
|
||||
mediaPlayer.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK);//cpu lock
|
||||
try {
|
||||
mediaPlayer.setDataSource(source);
|
||||
mediaPlayer.prepare(); //We are already in a separate worker thread,
|
||||
//so calling the blocking prepare() method should be ok
|
||||
|
||||
//alternatively:
|
||||
//mediaPlayer.setOnPreparedListener(this);
|
||||
//mediaPlayer.prepareAsync(); //prepare async to not block main thread
|
||||
} catch (IOException ioe) {
|
||||
ioe.printStackTrace();
|
||||
Log.e(TAG, "video source:" + source);
|
||||
Log.e(TAG, "video title:" + title);
|
||||
//can't do anything useful without a file to play; exit early
|
||||
return;
|
||||
}
|
||||
|
||||
WifiManager wifiMgr = ((WifiManager)getSystemService(Context.WIFI_SERVICE));
|
||||
wifiLock = wifiMgr.createWifiLock(WifiManager.WIFI_MODE_FULL, TAG);
|
||||
|
||||
mediaPlayer.setOnCompletionListener(new EndListener(wifiLock));//listen for end of video
|
||||
|
||||
//get audio focus
|
||||
/*
|
||||
AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
|
||||
int result = audioManager.requestAudioFocus(this, AudioManager.STREAM_MUSIC,
|
||||
AudioManager.AUDIOFOCUS_GAIN);
|
||||
|
||||
if (result != AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
|
||||
// could not get audio focus.
|
||||
}*/
|
||||
wifiLock.acquire();
|
||||
mediaPlayer.start();
|
||||
|
||||
IntentFilter filter = new IntentFilter();
|
||||
filter.setPriority(Integer.MAX_VALUE);
|
||||
filter.addAction(ACTION_PLAYPAUSE);
|
||||
filter.addAction(ACTION_STOP);
|
||||
registerReceiver(broadcastReceiver, filter);
|
||||
|
||||
PendingIntent playPI = PendingIntent.getBroadcast(owner, noteID, new Intent(ACTION_PLAYPAUSE), PendingIntent.FLAG_UPDATE_CURRENT);
|
||||
|
||||
NotificationCompat.Action playButton = new NotificationCompat.Action.Builder
|
||||
(R.drawable.ic_play_arrow_white_48dp, "Play", playPI).build();
|
||||
|
||||
NotificationCompat.Action pauseButton = new NotificationCompat.Action.Builder
|
||||
(R.drawable.ic_play_arrow_white_48dp, "Pause", playPI).build();
|
||||
|
||||
PendingIntent stopPI = PendingIntent.getBroadcast(owner, noteID,
|
||||
new Intent(ACTION_STOP), PendingIntent.FLAG_UPDATE_CURRENT);
|
||||
|
||||
//todo: make it so that tapping the notification brings you back to the Video's DetailActivity
|
||||
//using setContentIntent
|
||||
noteBuilder = new NotificationCompat.Builder(owner);
|
||||
noteBuilder
|
||||
.setPriority(Notification.PRIORITY_LOW)
|
||||
.setCategory(Notification.CATEGORY_TRANSPORT)
|
||||
.setContentTitle(title)
|
||||
.setContentText("NewPipe is playing in the background")//todo: translation string
|
||||
//.setAutoCancel(!mediaPlayer.isPlaying())
|
||||
.setOngoing(true)
|
||||
.setDeleteIntent(stopPI)
|
||||
//.setProgress(vidLength, 0, false) //doesn't fit with Notification.MediaStyle
|
||||
.setSmallIcon(R.mipmap.ic_launcher)
|
||||
.setTicker(title + " - NewPipe")
|
||||
.addAction(playButton);
|
||||
/* .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
|
||||
.setLargeIcon(cover)*/
|
||||
|
||||
noteBuilder.setStyle(new NotificationCompat.MediaStyle()
|
||||
//.setMediaSession(mMediaSession.getSessionToken())
|
||||
.setShowActionsInCompactView(new int[] {0})
|
||||
.setShowCancelButton(true)
|
||||
.setCancelButtonIntent(stopPI)
|
||||
);
|
||||
|
||||
startForeground(noteID, noteBuilder.build());
|
||||
|
||||
//currently decommissioned progressbar looping update code - works, but doesn't fit inside
|
||||
//Notification.MediaStyle Notification layout.
|
||||
noteMgr = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
|
||||
/*
|
||||
//update every 2s or 4 times in the video, whichever is shorter
|
||||
int sleepTime = Math.min(2000, (int)((double)vidLength/4));
|
||||
while(mediaPlayer.isPlaying()) {
|
||||
noteBuilder.setProgress(vidLength, mediaPlayer.getCurrentPosition(), false);
|
||||
noteMgr.notify(noteID, noteBuilder.build());
|
||||
try {
|
||||
Thread.sleep(sleepTime);
|
||||
} catch (InterruptedException e) {
|
||||
Log.d(TAG, "sleep failure");
|
||||
}
|
||||
}*/
|
||||
|
||||
}
|
||||
|
||||
private final BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
String action = intent.getAction();
|
||||
Log.i(TAG, "received broadcast action:"+action);
|
||||
if(action.equals(ACTION_PLAYPAUSE)) {
|
||||
if(mediaPlayer.isPlaying()) {
|
||||
mediaPlayer.pause();
|
||||
}
|
||||
else {
|
||||
//reacquire CPU lock after releasing it on pause
|
||||
mediaPlayer.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK);
|
||||
mediaPlayer.start();
|
||||
}
|
||||
}
|
||||
else if(action.equals(ACTION_STOP)) {
|
||||
mediaPlayer.stop();//this auto-releases CPU lock
|
||||
afterPlayCleanup();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
private void afterPlayCleanup() {
|
||||
//noteBuilder.setProgress(0, 0, false);
|
||||
//remove progress bar
|
||||
//remove notification
|
||||
noteMgr.cancel(noteID);
|
||||
unregisterReceiver(broadcastReceiver);
|
||||
//release mediaPlayer's system resources
|
||||
mediaPlayer.release();
|
||||
|
||||
//release wifilock
|
||||
wifiLock.release();
|
||||
//remove foreground status of service; make us killable
|
||||
stopForeground(true);
|
||||
|
||||
stopSelf();
|
||||
}
|
||||
|
||||
private class EndListener implements MediaPlayer.OnCompletionListener {
|
||||
private WifiManager.WifiLock wl;
|
||||
public EndListener(WifiManager.WifiLock wifiLock) {
|
||||
this.wl = wifiLock;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCompletion(MediaPlayer mp) {
|
||||
afterPlayCleanup();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
119
app/src/main/java/org/schabi/newpipe/BaseFragment.java
Normal file
119
app/src/main/java/org/schabi/newpipe/BaseFragment.java
Normal file
@@ -0,0 +1,119 @@
|
||||
package org.schabi.newpipe;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.TypedArray;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.AttrRes;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
|
||||
import com.nostra13.universalimageloader.core.DisplayImageOptions;
|
||||
import com.nostra13.universalimageloader.core.ImageLoader;
|
||||
import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer;
|
||||
import com.squareup.leakcanary.RefWatcher;
|
||||
|
||||
import icepick.Icepick;
|
||||
|
||||
public abstract class BaseFragment extends Fragment {
|
||||
protected final String TAG = getClass().getSimpleName() + "@" + Integer.toHexString(hashCode());
|
||||
protected boolean DEBUG = MainActivity.DEBUG;
|
||||
|
||||
protected AppCompatActivity activity;
|
||||
public static final ImageLoader imageLoader = ImageLoader.getInstance();
|
||||
|
||||
/*//////////////////////////////////////////////////////////////////////////
|
||||
// Fragment's Lifecycle
|
||||
//////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
@Override
|
||||
public void onAttach(Context context) {
|
||||
super.onAttach(context);
|
||||
activity = (AppCompatActivity) context;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDetach() {
|
||||
super.onDetach();
|
||||
activity = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
if (DEBUG) Log.d(TAG, "onCreate() called with: savedInstanceState = [" + savedInstanceState + "]");
|
||||
super.onCreate(savedInstanceState);
|
||||
Icepick.restoreInstanceState(this, savedInstanceState);
|
||||
if (savedInstanceState != null) onRestoreInstanceState(savedInstanceState);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onViewCreated(View rootView, Bundle savedInstanceState) {
|
||||
super.onViewCreated(rootView, savedInstanceState);
|
||||
if (DEBUG) {
|
||||
Log.d(TAG, "onViewCreated() called with: rootView = [" + rootView + "], savedInstanceState = [" + savedInstanceState + "]");
|
||||
}
|
||||
initViews(rootView, savedInstanceState);
|
||||
initListeners();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSaveInstanceState(Bundle outState) {
|
||||
super.onSaveInstanceState(outState);
|
||||
Icepick.saveInstanceState(this, outState);
|
||||
}
|
||||
|
||||
protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
super.onDestroy();
|
||||
|
||||
RefWatcher refWatcher = App.getRefWatcher(getActivity());
|
||||
if (refWatcher != null) refWatcher.watch(this);
|
||||
}
|
||||
|
||||
/*//////////////////////////////////////////////////////////////////////////
|
||||
// Init
|
||||
//////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
protected void initViews(View rootView, Bundle savedInstanceState) {
|
||||
}
|
||||
|
||||
protected void initListeners() {
|
||||
}
|
||||
|
||||
/*//////////////////////////////////////////////////////////////////////////
|
||||
// DisplayImageOptions default configurations
|
||||
//////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
public static final DisplayImageOptions BASE_OPTIONS =
|
||||
new DisplayImageOptions.Builder().cacheInMemory(true).build();
|
||||
|
||||
public static final DisplayImageOptions DISPLAY_AVATAR_OPTIONS =
|
||||
new DisplayImageOptions.Builder()
|
||||
.cloneFrom(BASE_OPTIONS)
|
||||
.showImageOnLoading(R.drawable.buddy)
|
||||
.showImageForEmptyUri(R.drawable.buddy)
|
||||
.showImageOnFail(R.drawable.buddy)
|
||||
.build();
|
||||
|
||||
public static final DisplayImageOptions DISPLAY_THUMBNAIL_OPTIONS =
|
||||
new DisplayImageOptions.Builder()
|
||||
.cloneFrom(BASE_OPTIONS)
|
||||
.displayer(new FadeInBitmapDisplayer(250))
|
||||
.showImageForEmptyUri(R.drawable.dummy_thumbnail)
|
||||
.showImageOnFail(R.drawable.dummy_thumbnail)
|
||||
.build();
|
||||
|
||||
public static final DisplayImageOptions DISPLAY_BANNER_OPTIONS =
|
||||
new DisplayImageOptions.Builder()
|
||||
.cloneFrom(BASE_OPTIONS)
|
||||
.showImageOnLoading(R.drawable.channel_banner)
|
||||
.showImageForEmptyUri(R.drawable.channel_banner)
|
||||
.showImageOnFail(R.drawable.channel_banner)
|
||||
.build();
|
||||
}
|
@@ -1,91 +0,0 @@
|
||||
package org.schabi.newpipe;
|
||||
|
||||
import android.app.Dialog;
|
||||
import android.app.DownloadManager;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.SharedPreferences;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v4.app.DialogFragment;
|
||||
import android.support.v7.app.AlertDialog;
|
||||
import android.util.Log;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
/**
|
||||
* Created by Christian Schabesberger on 21.09.15.
|
||||
*
|
||||
* Copyright (C) Christian Schabesberger 2015 <chris.schabesberger@mailbox.org>
|
||||
* DownloadDialog.java is part of NewPipe.
|
||||
*
|
||||
* NewPipe is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* NewPipe is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with NewPipe. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
public class DownloadDialog extends DialogFragment {
|
||||
private static final String TAG = DialogFragment.class.getName();
|
||||
|
||||
public static final String TITLE = "name";
|
||||
public static final String FILE_SUFFIX_AUDIO = "file_suffix_audio";
|
||||
public static final String FILE_SUFFIX_VIDEO = "file_suffix_video";
|
||||
public static final String AUDIO_URL = "audio_url";
|
||||
public static final String VIDEO_URL = "video_url";
|
||||
private Bundle arguments;
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||
arguments = getArguments();
|
||||
super.onCreateDialog(savedInstanceState);
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
|
||||
builder.setTitle(R.string.downloadDialogTitle)
|
||||
.setItems(R.array.downloadOptions, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
Context context = getActivity();
|
||||
SharedPreferences defaultPreferences = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
String suffix = "";
|
||||
String title = arguments.getString(TITLE);
|
||||
String url = "";
|
||||
switch(which) {
|
||||
case 0: // Video
|
||||
suffix = arguments.getString(FILE_SUFFIX_VIDEO);
|
||||
url = arguments.getString(VIDEO_URL);
|
||||
break;
|
||||
case 1:
|
||||
suffix = arguments.getString(FILE_SUFFIX_AUDIO);
|
||||
url = arguments.getString(AUDIO_URL);
|
||||
break;
|
||||
default:
|
||||
Log.d(TAG, "lolz");
|
||||
}
|
||||
DownloadManager dm = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
|
||||
DownloadManager.Request request = new DownloadManager.Request(
|
||||
Uri.parse(url));
|
||||
request.setDestinationUri(Uri.fromFile(new File(
|
||||
defaultPreferences.getString("download_path_preference", "/storage/emulated/0/NewPipe")
|
||||
+ "/" + title + suffix)));
|
||||
try {
|
||||
dm.enqueue(request);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
});
|
||||
return builder.create();
|
||||
}
|
||||
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user