1
mirror of https://github.com/TeamNewPipe/NewPipe synced 2025-10-04 13:40:52 +02:00

Compare commits

..

154 Commits

Author SHA1 Message Date
TobiGr
2152375227 Bump version to 0.18.2 [hotfix release] 2020-01-24 02:30:08 +01:00
TobiGr
10d57afaac Update extractor version 2020-01-24 02:29:21 +01:00
Tobias Groza
42ff60ce85 Merge pull request #2956 from TeamNewPipe/release_v0.18.1
Release v0.18.1
2020-01-19 09:54:05 +01:00
TobiGr
fd62411b35 Bump version to 0.18.1 and version code to 810 2020-01-18 00:09:40 +01:00
TobiGr
134850aa04 Add changelog for 0.18.1 2020-01-18 00:09:27 +01:00
TobiGr
0795135f2f Merge remote-tracking branch 'Weblate/dev' into dev 2020-01-18 00:01:55 +01:00
Tobias Groza
85eb1dc436 Merge pull request #2966 from B0pol/c_links_support
[YouTube] /c/ channel links support & update extractor version
2020-01-17 23:59:41 +01:00
B0pol
2f2b8784f9 update extractor version 2020-01-17 23:07:45 +01:00
bopol
181658e5a4 support for opening /c/ channel links 2020-01-17 22:59:51 +01:00
WaldiS
d949894511 Translated using Weblate (Polish)
Currently translated at 100.0% (527 of 527 strings)
2020-01-17 10:02:16 +01:00
Igor Nedoboy
235ead9222 Translated using Weblate (Russian)
Currently translated at 100.0% (527 of 527 strings)
2020-01-16 20:57:01 +01:00
nautilusx
3ee6788753 Translated using Weblate (German)
Currently translated at 100.0% (527 of 527 strings)
2020-01-16 14:15:09 +01:00
Deleted User
e3dfab5078 Translated using Weblate (Norwegian Bokmål)
Currently translated at 96.4% (508 of 527 strings)
2020-01-16 06:28:38 +01:00
Allan Nordhøy
5f232a059d Translated using Weblate (Norwegian Bokmål)
Currently translated at 96.4% (508 of 527 strings)
2020-01-16 06:28:38 +01:00
Loís B
1b708d261d Translated using Weblate (Occitan)
Currently translated at 18.8% (99 of 527 strings)
2020-01-15 20:36:11 +01:00
Yaron Shahrabani
3341742f66 Translated using Weblate (Hebrew)
Currently translated at 100.0% (527 of 527 strings)
2020-01-15 20:36:11 +01:00
Oğuz Ersen
b731c79339 Translated using Weblate (Turkish)
Currently translated at 100.0% (527 of 527 strings)
2020-01-15 20:36:10 +01:00
Igor Nedoboy
29b12c2f84 Translated using Weblate (Russian)
Currently translated at 100.0% (527 of 527 strings)
2020-01-15 20:36:09 +01:00
chr56
ba53f6611c Translated using Weblate (Chinese (Simplified))
Currently translated at 97.3% (513 of 527 strings)
2020-01-15 10:10:31 +01:00
Hosted Weblate
6eeed50418 Merge branch 'origin/dev' into Weblate. 2020-01-15 09:42:51 +01:00
Loís B
8caf9f87a1 Translated using Weblate (Occitan)
Currently translated at 17.9% (94 of 525 strings)
2020-01-15 09:42:49 +01:00
B0pol
2e6089088b Translated using Weblate (Urdu)
Currently translated at 95.0% (499 of 525 strings)
2020-01-15 09:42:46 +01:00
Matsuri
40eaa166ae Translated using Weblate (Chinese (Simplified))
Currently translated at 97.3% (511 of 525 strings)
2020-01-15 09:42:45 +01:00
B0pol
41e2e5f951 Translated using Weblate (Esperanto)
Currently translated at 100.0% (525 of 525 strings)
2020-01-15 09:42:44 +01:00
B0pol
ac3938d529 Translated using Weblate (French)
Currently translated at 100.0% (525 of 525 strings)
2020-01-15 09:42:43 +01:00
DodoLeDev
515ec4d66d Translated using Weblate (French)
Currently translated at 100.0% (525 of 525 strings)
2020-01-15 09:42:43 +01:00
Nehemias Feliz
5adc27ea2b Translated using Weblate (Spanish)
Currently translated at 100.0% (525 of 525 strings)
2020-01-15 09:42:42 +01:00
C. Rüdinger
ab089a5f93 Translated using Weblate (German)
Currently translated at 100.0% (525 of 525 strings)
2020-01-15 09:42:41 +01:00
TobiGr
9f47a274a8 Update extractor version
TeamNewPipe/NewPipeExtractor@bdbfa26835
2020-01-13 20:40:11 +01:00
TobiGr
1f8c0a9e5e Merge remote-tracking branch 'Weblate/dev' into dev 2020-01-13 20:33:24 +01:00
Tobias Groza
cef9ccd937 Merge pull request #2717 from kszczek/delete-finished-downloads
Add option to delete files when clearing finished downloads
2020-01-13 20:32:18 +01:00
TobiGr
3d93ecd6ec Use Integer value directly for formatted string
a
2020-01-13 20:25:32 +01:00
Loís B
36e38e50e9 Translated using Weblate (Occitan)
Currently translated at 10.1% (53 of 525 strings)
2020-01-13 15:49:01 +01:00
Software In Interlingua
1a8be2bbf5 Translated using Weblate (Interlingua)
Currently translated at 11.4% (60 of 525 strings)
2020-01-13 15:48:59 +01:00
Allan Nordhøy
92b1fa5743 Translated using Weblate (Norwegian Bokmål)
Currently translated at 96.2% (505 of 525 strings)
2020-01-13 15:48:58 +01:00
MohammedSR Vevo
335e5c05db Translated using Weblate (Kurdish)
Currently translated at 100.0% (525 of 525 strings)
2020-01-13 15:48:58 +01:00
Yaron Shahrabani
bfead79c07 Translated using Weblate (Hebrew)
Currently translated at 100.0% (525 of 525 strings)
2020-01-13 15:48:57 +01:00
Jeff Huang
bd8014bcbd Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (525 of 525 strings)
2020-01-13 15:48:57 +01:00
Matsuri
948d57d3d1 Translated using Weblate (Chinese (Simplified))
Currently translated at 97.3% (511 of 525 strings)
2020-01-13 15:48:56 +01:00
Daniele Lira Mereb
31b830d6d0 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (525 of 525 strings)
2020-01-13 15:48:56 +01:00
WaldiS
2038df976c Translated using Weblate (Polish)
Currently translated at 100.0% (525 of 525 strings)
2020-01-13 15:48:54 +01:00
Oğuz Ersen
46cc215120 Translated using Weblate (Turkish)
Currently translated at 100.0% (525 of 525 strings)
2020-01-13 15:48:53 +01:00
zmni
3afce82aa7 Translated using Weblate (Indonesian)
Currently translated at 99.6% (523 of 525 strings)
2020-01-13 15:48:52 +01:00
B0pol
88e5be237e Translated using Weblate (Esperanto)
Currently translated at 100.0% (525 of 525 strings)
2020-01-13 15:48:51 +01:00
Petros Grammatikopoulos
7c4b9d8843 Translated using Weblate (Greek)
Currently translated at 97.7% (513 of 525 strings)
2020-01-13 15:48:50 +01:00
Osoitz
b83e1716fe Translated using Weblate (Basque)
Currently translated at 99.4% (522 of 525 strings)
2020-01-13 15:48:49 +01:00
ssantos
c3e41e2427 Translated using Weblate (Portuguese)
Currently translated at 100.0% (525 of 525 strings)
2020-01-13 15:48:49 +01:00
B0pol
3f67b3b73c Translated using Weblate (French)
Currently translated at 100.0% (525 of 525 strings)
2020-01-13 15:48:48 +01:00
nautilusx
78c9e4e1ad Translated using Weblate (German)
Currently translated at 100.0% (525 of 525 strings)
2020-01-13 15:48:48 +01:00
C. Rüdinger
69c090b5a1 Translated using Weblate (German)
Currently translated at 100.0% (525 of 525 strings)
2020-01-13 15:48:47 +01:00
Kamil Szczęk
2c8222fd55 Style corrected 2020-01-11 15:19:24 +01:00
Kamil Szczęk
d071891b2a Add a snackbar to allow user to undo file deletion 2020-01-11 15:09:01 +01:00
Kamil Szczęk
986acc5fc5 Reorder buttons in clear downloads dialog 2020-01-11 15:09:01 +01:00
Kamil Szczęk
e4295fb3fa Use a dialog option instead of a checkbox 2020-01-11 15:09:01 +01:00
Kamil Szczęk
cfad3fb5de Fix inconsistent style 2020-01-11 15:09:01 +01:00
Kamil Szczęk
b18236a27e Put call to forget finished downloads in an else statement to prevent potential bugs 2020-01-11 15:09:01 +01:00
Kamil Szczęk
f6bbc69cf9 Remove unnecessary import 2020-01-11 15:09:01 +01:00
Kamil Szczęk
707e4f7167 Add option to remove downloaded files when clearing finished downloads 2020-01-11 15:09:01 +01:00
TobiGr
99cdaec40e Translated using Weblate (German)
Currently translated at 99.0% (520 of 525 strings)
2020-01-09 17:23:02 +01:00
Igor Nedoboy
bff5371e41 Translated using Weblate (Russian)
Currently translated at 100.0% (525 of 525 strings)
2020-01-09 02:51:05 +01:00
Hosted Weblate
a76398efd0 Merge branch 'origin/dev' into Weblate. 2020-01-08 20:51:08 +01:00
Allan Nordhøy
99bcd8d043 Translated using Weblate (Norwegian Bokmål)
Currently translated at 96.0% (501 of 522 strings)
2020-01-08 20:51:04 +01:00
Software In Interlingua
1602ecbaf9 Translated using Weblate (Interlingua)
Currently translated at 11.1% (58 of 522 strings)
2020-01-08 20:51:04 +01:00
Tobias Groza
7e17bdf369 Merge pull request #2935 from comradekingu/patch-9
Spelling: Could not, PeerTube, HTTPS, URL
2020-01-08 19:09:43 +01:00
Allan Nordhøy
d316bbad44 Select your favorite
Co-Authored-By: Stypox <stypox@pm.me>
2020-01-08 18:22:17 +01:00
Tobias Groza
72151c8c0c Merge pull request #2906 from kapodamy/opus-fixup
add opus file extension
2020-01-08 18:19:23 +01:00
Allan Nordhøy
e2e0a9bfa2 Spelling: Could not, PeerTube, HTTPS, URL 2020-01-08 17:51:35 +01:00
kapodamy
8d53b07167 fixup
* [DownloadDialog.java] use *.opus extension instead of *.webm (bad change from 844f80a5f1)
* [StreamItemAdapter.java] show "opus" in format label instead of "WebM Opus"
2020-01-08 12:42:34 -03:00
Tobias Groza
1df852171d Merge pull request #2837 from decarvalhobo/dev
Playlist thumbnail updates
2020-01-07 23:02:42 +01:00
TobiGr
399e2626fb Fix code style and improve imports 2020-01-07 22:48:35 +01:00
decarvalhobo
752a76eb44 Usage of drawable instead of remote image + refactor the append to an empty playlist by just updating the thumbnail before adding the item in it. 2020-01-07 22:33:45 +01:00
De Carvalho Marcio Antonio
8feee05eec remove comments 2020-01-07 22:33:45 +01:00
De Carvalho Marcio Antonio
e9a4caaf0b remove comments 2020-01-07 22:33:45 +01:00
decarvalhobo
8de367e03f fix issue: thumbnail update when element deleted + thumbnail update when element added and no thumbnail 2020-01-07 22:33:45 +01:00
TobiGr
dad88b83fb Fix Arabic translation 2020-01-07 22:33:30 +01:00
TobiGr
846f7f2f05 Merge remote-tracking branch 'Weblate/dev' into dev 2020-01-07 22:28:15 +01:00
pjammo
41e18ae694 Translated using Weblate (Italian)
Currently translated at 100.0% (522 of 522 strings)
2020-01-07 17:21:22 +01:00
Daniele Lira Mereb
deeac118a1 Translated using Weblate (Portuguese (Brazil))
Currently translated at 97.3% (508 of 522 strings)
2020-01-07 17:21:21 +01:00
MohammedSR Vevo
594d77e713 Translated using Weblate (Kurdish)
Currently translated at 100.0% (522 of 522 strings)
2020-01-06 00:21:31 +01:00
JoC
2ea404659b Translated using Weblate (Spanish)
Currently translated at 100.0% (522 of 522 strings)
2020-01-06 00:21:28 +01:00
Software In Interlingua
e2ec95e6ff Translated using Weblate (Interlingua)
Currently translated at 10.9% (57 of 522 strings)
2020-01-06 00:21:28 +01:00
pietrasagh
db87df743d Translated using Weblate (Polish)
Currently translated at 100.0% (522 of 522 strings)
2020-01-06 00:21:27 +01:00
ssantos
23f9ffdab7 Translated using Weblate (Portuguese)
Currently translated at 100.0% (522 of 522 strings)
2020-01-06 00:21:26 +01:00
Enol P
28063c35c2 Translated using Weblate (Asturian)
Currently translated at 49.2% (257 of 522 strings)
2020-01-06 00:21:25 +01:00
Иван
21a39b06e7 Translated using Weblate (Ukrainian)
Currently translated at 98.1% (512 of 522 strings)
2020-01-06 00:21:23 +01:00
Osoitz
8fb29ae6c2 Translated using Weblate (Basque)
Currently translated at 99.8% (521 of 522 strings)
2020-01-06 00:21:22 +01:00
B0pol
21895caa3a Translated using Weblate (Esperanto)
Currently translated at 100.0% (522 of 522 strings)
2020-01-06 00:21:20 +01:00
THANOS SIOURDAKIS
f17b92512c Translated using Weblate (Greek)
Currently translated at 97.9% (511 of 522 strings)
2020-01-06 00:21:19 +01:00
ssantos
014682664d Translated using Weblate (German)
Currently translated at 100.0% (522 of 522 strings)
2020-01-06 00:21:18 +01:00
Tobias Groza
5bf1df9f14 Merge pull request #2690 from K1rakishou/(#1570)-lock-screen-video-thumbnail
Show video thumbnail on the lock screen
2020-01-05 10:36:38 +01:00
k1rakishou
eb5fb42da9 Couple more code review changes 2020-01-03 16:29:04 +03:00
k1rakishou
c46a0f7b2e Code-review changes 2020-01-03 13:00:53 +03:00
k1rakishou
835476870b Merge remote-tracking branch 'push_here/(#1570)-lock-screen-video-thumbnail' into (#1570)-lock-screen-video-thumbnail
# Conflicts:
#	app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java
#	app/src/main/java/org/schabi/newpipe/player/helper/MediaSessionManager.java
#	app/src/main/java/org/schabi/newpipe/util/BitmapUtils.java
#	app/src/main/res/xml/video_audio_settings.xml
2020-01-03 12:56:01 +03:00
TobiGr
718acb5059 Code improvements 2020-01-02 15:00:31 +01:00
TobiGr
1aa763e86c Enable lockscreen video thumbnail by default 2020-01-02 15:00:31 +01:00
k1rakishou
0395dc6e9e Add a setting for the lock screen thumbnail feature 2020-01-02 15:00:31 +01:00
k1rakishou
96de70b71e Rebase onto the latest dev, update appcompat dependencies to use androidx 2020-01-02 15:00:31 +01:00
k1rakishou
f44883e79f Show video thumbnail on the lock screen 2020-01-02 15:00:31 +01:00
Tobias Groza
c56fb8cec2 Merge pull request #2871 from atpamat/main-window-tabs
make main page tabs scrollable and hide when there is only a single tab
2020-01-02 13:22:01 +01:00
Paweł Matuszewski
3625a38a23 improve code consistency in ScrollableTabLayout 2020-01-02 13:02:14 +01:00
Paweł Matuszewski
1393d3ad7f fix ScrollableTabLayout content width calculation
fix bug where only minimum width requested by tab was counted even if actual content was wider
2020-01-02 13:02:14 +01:00
Paweł Matuszewski
b674cfec24 simplify ScrollableTabLayout tabs width checking 2020-01-02 13:02:14 +01:00
Paweł Matuszewski
f0f0c43b72 hide main page tab selector with single tab 2020-01-02 13:02:14 +01:00
Paweł Matuszewski
33caad4690 make main page tabs scrollable 2020-01-02 13:02:14 +01:00
Tobias Groza
0afc8005d0 Merge pull request #2771 from atpamat/background-player-notif-lag
Limit amount of notification thumbnail updates in background player
2020-01-01 23:01:11 +01:00
Yaron Shahrabani
f04d2e76fa Translated using Weblate (Hebrew)
Currently translated at 100.0% (522 of 522 strings)
2020-01-01 19:12:04 +01:00
Igor Nedoboy
8e1d7f162d Translated using Weblate (Russian)
Currently translated at 100.0% (522 of 522 strings)
2020-01-01 19:12:01 +01:00
Paweł Matuszewski
ee65e89230 limit amount of notification thumbnail updates
limits amount of calls to updateNotificationThumbnail in background player
2020-01-01 16:38:46 +01:00
Matsuri
a8e26238a8 Translated using Weblate (Chinese (Simplified))
Currently translated at 98.7% (515 of 522 strings)
2020-01-01 13:26:15 +01:00
MohammedSR Vevo
a3dc95bef1 Translated using Weblate (Kurdish)
Currently translated at 99.8% (521 of 522 strings)
2020-01-01 13:26:15 +01:00
Software In Interlingua
a29df9a2dd Translated using Weblate (Interlingua)
Currently translated at 9.4% (49 of 522 strings)
2020-01-01 13:26:14 +01:00
Yaron Shahrabani
cc17d268fc Translated using Weblate (Hebrew)
Currently translated at 100.0% (522 of 522 strings)
2020-01-01 13:26:11 +01:00
Ariel Shulman
22a9a06b87 Translated using Weblate (Hebrew)
Currently translated at 100.0% (522 of 522 strings)
2020-01-01 13:26:09 +01:00
chr56
d063d39dbc Translated using Weblate (Chinese (Simplified))
Currently translated at 98.7% (515 of 522 strings)
2019-12-31 19:01:41 +01:00
Jeff Huang
87e29dbd84 Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (522 of 522 strings)
2019-12-31 19:01:40 +01:00
MohammedSR Vevo
2227a7a6bd Translated using Weblate (Kurdish)
Currently translated at 99.8% (521 of 522 strings)
2019-12-31 19:01:39 +01:00
ButterflyOfFire
867f633d16 Translated using Weblate (French)
Currently translated at 99.4% (519 of 522 strings)
2019-12-31 19:01:34 +01:00
ButterflyOfFire
b9de3c202a Translated using Weblate (Arabic)
Currently translated at 100.0% (522 of 522 strings)
2019-12-31 19:01:33 +01:00
pjammo
56364c4a2c Translated using Weblate (Italian)
Currently translated at 100.0% (522 of 522 strings)
2019-12-31 19:01:32 +01:00
WaldiS
b1fd2c007d Translated using Weblate (Polish)
Currently translated at 99.2% (518 of 522 strings)
2019-12-31 19:01:27 +01:00
Yaron Shahrabani
741a872c39 Translated using Weblate (Hebrew)
Currently translated at 100.0% (522 of 522 strings)
2019-12-31 19:01:26 +01:00
Igor Nedoboy
e1e2add616 Translated using Weblate (Russian)
Currently translated at 100.0% (522 of 522 strings)
2019-12-31 19:01:25 +01:00
C. Rüdinger
0c664e346a Translated using Weblate (German)
Currently translated at 99.2% (518 of 522 strings)
2019-12-31 19:01:25 +01:00
Oğuz Ersen
7ddb856ccd Translated using Weblate (Turkish)
Currently translated at 100.0% (522 of 522 strings)
2019-12-31 19:01:24 +01:00
Software In Interlingua
17c0b981d1 Added translation using Weblate (Interlingua) 2019-12-31 19:01:20 +01:00
Tobias Groza
7f0a9904ff Merge pull request #2913 from yausername/fixTranslatableUrl
made instance list url non translatable
2019-12-31 15:51:27 +01:00
yausername
2b4190d85d made instance list url non translatable 2019-12-31 20:10:51 +05:30
Tobias Groza
57e89babf1 Merge pull request #2879 from Louis-Berlic/dev
Add support for Occitan language
2019-12-31 11:02:14 +01:00
Tobias Groza
209dc5ace9 Merge pull request #2912 from mauriciocolli/fix-wrong-thread-access
Fix for player access out of its creation thread
2019-12-31 10:55:12 +01:00
Mauricio Colli
1e7e8d4121 Fix for player access out of its creation thread 2019-12-31 02:52:16 -03:00
Tobias Groza
04b75ef05f Merge pull request #2636 from dotvirus/longpress-on-custom-playlists
Add local playlist to queue when long clicking on 'Background/Popup'
2019-12-31 01:50:52 +01:00
dotvirus
de19421de1 Update LocalPlaylistFragment.java 2019-12-31 01:42:41 +01:00
Tobias Groza
61f64a7349 Merge pull request #2875 from Nico-late/Issue#2838
Fixed issues #2838 #2797 #2773
2019-12-31 01:23:24 +01:00
Nico-late
6fb16bad85 Update app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java
Space added for more clarity

Co-Authored-By: Tobias Groza <TobiGr@users.noreply.github.com>
2019-12-31 00:52:01 +01:00
Nico-late
694813ac90 Fixed issue #2838 2019-12-31 00:52:01 +01:00
C. Rüdinger
6f3fd50ed8 Translated using Weblate (German)
Currently translated at 99.2% (518 of 522 strings)
2019-12-30 14:06:08 +01:00
TobiGr
c1e1c191d0 Translated using Weblate (German)
Currently translated at 99.2% (518 of 522 strings)
2019-12-30 14:06:08 +01:00
Igor Nedoboy
f4c8fdaf07 Translated using Weblate (Russian)
Currently translated at 100.0% (522 of 522 strings)
2019-12-29 23:20:25 +01:00
MohammedSR Vevo
457ebe3aa2 Translated using Weblate (Kurdish)
Currently translated at 78.5% (410 of 522 strings)
2019-12-29 22:55:19 +01:00
MohammedSR Vevo
8da8ce0a0a Translated using Weblate (Kurdish)
Currently translated at 70.9% (360 of 508 strings)
2019-12-29 13:59:23 +01:00
Igor Nedoboy
cc869b98a3 Translated using Weblate (Russian)
Currently translated at 100.0% (508 of 508 strings)
2019-12-29 13:59:01 +01:00
winqooq
f9e7873e54 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (508 of 508 strings)
2019-12-27 17:26:55 +01:00
Hosted Weblate
c4cba8aa37 Merge branch 'origin/dev' into Weblate. 2019-12-27 09:21:15 +01:00
Jaewoi
22e4ef4034 Translated using Weblate (Korean)
Currently translated at 98.6% (501 of 508 strings)
2019-12-27 09:21:12 +01:00
thami simo
708cdc4c62 Translated using Weblate (Arabic)
Currently translated at 100.0% (522 of 522 strings)
2019-12-24 08:21:11 +01:00
Hosted Weblate
94931df60b Merge branch 'origin/dev' into Weblate. 2019-12-22 23:21:13 +01:00
Éfrit
b3605fe6d4 Translated using Weblate (French)
Currently translated at 100.0% (508 of 508 strings)
2019-12-22 23:21:11 +01:00
justanidea
11e0ed7c4f Translated using Weblate (French)
Currently translated at 100.0% (508 of 508 strings)
2019-12-22 23:21:11 +01:00
WaldiS
34e89448b1 Translated using Weblate (Polish)
Currently translated at 100.0% (508 of 508 strings)
2019-12-22 23:21:09 +01:00
Louis-Berlic
a08cd4ce6a Move to values-oc 2019-12-19 16:11:17 +01:00
Louis-Berlic
46b12ed819 Added initial strings.xml for Occitan language 2019-12-19 16:10:09 +01:00
k1rakishou
e8437052d8 Add a setting for the lock screen thumbnail feature 2019-11-28 21:47:15 +03:00
k1rakishou
cf13f5ca56 Rebase onto the latest dev, update appcompat dependencies to use androidx 2019-11-28 21:47:15 +03:00
k1rakishou
52f82ed228 Show video thumbnail on the lock screen 2019-11-28 21:47:15 +03:00
48 changed files with 1718 additions and 344 deletions

View File

@@ -11,8 +11,8 @@ android {
applicationId "org.schabi.newpipe"
minSdkVersion 19
targetSdkVersion 28
versionCode 800
versionName "0.18.0"
versionCode 820
versionName "0.18.2"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true
@@ -62,7 +62,7 @@ dependencies {
exclude module: 'support-annotations'
})
implementation 'com.github.TeamNewPipe:NewPipeExtractor:8e53fda'
implementation 'com.github.TeamNewPipe:NewPipeExtractor:ff61e284'
testImplementation 'junit:junit:4.12'
testImplementation 'org.mockito:mockito-core:2.23.0'

View File

@@ -153,6 +153,7 @@
<!-- channel prefix -->
<data android:pathPrefix="/channel/"/>
<data android:pathPrefix="/user/"/>
<data android:pathPrefix="/c/"/>
<!-- playlist prefix -->
<data android:pathPrefix="/playlist"/>
</intent-filter>

View File

@@ -38,6 +38,7 @@ import com.nononsenseapps.filepicker.Utils;
import org.schabi.newpipe.MainActivity;
import org.schabi.newpipe.R;
import org.schabi.newpipe.RouterActivity;
import org.schabi.newpipe.extractor.MediaFormat;
import org.schabi.newpipe.extractor.NewPipe;
import org.schabi.newpipe.extractor.localization.Localization;
@@ -368,6 +369,9 @@ public class DownloadDialog extends DialogFragment implements RadioGroup.OnCheck
toolbar.setOnMenuItemClickListener(item -> {
if (item.getItemId() == R.id.okay) {
prepareSelectedDownload();
if (getActivity() instanceof RouterActivity) {
getActivity().finish();
}
return true;
}
return false;
@@ -555,8 +559,16 @@ public class DownloadDialog extends DialogFragment implements RadioGroup.OnCheck
case R.id.audio_button:
mainStorage = mainStorageAudio;
format = audioStreamsAdapter.getItem(selectedAudioIndex).getFormat();
mime = format.mimeType;
filename += format.suffix;
switch(format) {
case WEBMA_OPUS:
mime = "audio/ogg";
filename += "opus";
break;
default:
mime = format.mimeType;
filename += format.suffix;
break;
}
break;
case R.id.video_button:
mainStorage = mainStorageVideo;

View File

@@ -30,6 +30,7 @@ import org.schabi.newpipe.settings.tabs.Tab;
import org.schabi.newpipe.settings.tabs.TabsManager;
import org.schabi.newpipe.util.NavigationHelper;
import org.schabi.newpipe.util.ServiceHelper;
import org.schabi.newpipe.views.ScrollableTabLayout;
import java.util.ArrayList;
import java.util.List;
@@ -37,7 +38,7 @@ import java.util.List;
public class MainFragment extends BaseFragment implements TabLayout.OnTabSelectedListener {
private ViewPager viewPager;
private SelectedTabsPagerAdapter pagerAdapter;
private TabLayout tabLayout;
private ScrollableTabLayout tabLayout;
private List<Tab> tabsList = new ArrayList<>();
private TabsManager tabsManager;

View File

@@ -1,15 +1,16 @@
package org.schabi.newpipe.local.dialog;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import org.schabi.newpipe.NewPipeDatabase;
import org.schabi.newpipe.R;
import org.schabi.newpipe.database.LocalItem;
@@ -152,6 +153,12 @@ public final class PlaylistAppendDialog extends PlaylistDialog {
final Toast successToast = Toast.makeText(getContext(),
R.string.playlist_add_stream_success, Toast.LENGTH_SHORT);
if (playlist.thumbnailUrl.equals("drawable://" + R.drawable.dummy_thumbnail_playlist)) {
playlistDisposables.add(manager.changePlaylistThumbnail(playlist.uid, streams.get(0).getThumbnailUrl())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(ignored -> successToast.show()));
}
playlistDisposables.add(manager.appendToPlaylist(playlist.uid, streams)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(ignored -> successToast.show()));

View File

@@ -4,11 +4,6 @@ import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Parcelable;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.recyclerview.widget.RecyclerView;
import androidx.recyclerview.widget.ItemTouchHelper;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
@@ -18,6 +13,12 @@ import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.recyclerview.widget.ItemTouchHelper;
import androidx.recyclerview.widget.RecyclerView;
import org.reactivestreams.Subscriber;
import org.reactivestreams.Subscription;
import org.schabi.newpipe.NewPipeDatabase;
@@ -325,6 +326,16 @@ public class LocalPlaylistFragment extends BaseLocalListFragment<List<PlaylistSt
headerBackgroundButton.setOnClickListener(view ->
NavigationHelper.playOnBackgroundPlayer(activity, getPlayQueue(), false));
headerPopupButton.setOnLongClickListener(view -> {
NavigationHelper.enqueueOnPopupPlayer(activity, getPlayQueue(), true);
return true;
});
headerBackgroundButton.setOnLongClickListener(view -> {
NavigationHelper.enqueueOnBackgroundPlayer(activity, getPlayQueue(), true);
return true;
});
hideLoading();
}
@@ -403,10 +414,25 @@ public class LocalPlaylistFragment extends BaseLocalListFragment<List<PlaylistSt
disposables.add(disposable);
}
private void updateThumbnailUrl() {
String newThumbnailUrl;
if (!itemListAdapter.getItemsList().isEmpty()) {
newThumbnailUrl = ((PlaylistStreamEntry) itemListAdapter.getItemsList().get(0)).thumbnailUrl;
} else {
newThumbnailUrl = "drawable://" + R.drawable.dummy_thumbnail_playlist;
}
changeThumbnailUrl(newThumbnailUrl);
}
private void deleteItem(final PlaylistStreamEntry item) {
if (itemListAdapter == null) return;
itemListAdapter.removeItem(item);
if (playlistManager.getPlaylistThumbnail(playlistId).equals(item.thumbnailUrl))
updateThumbnailUrl();
setVideoCount(itemListAdapter.getItemsList().size());
saveChanges();
}

View File

@@ -103,6 +103,10 @@ public class LocalPlaylistManager {
return modifyPlaylist(playlistId, null, thumbnailUrl);
}
public String getPlaylistThumbnail(final long playlistId) {
return playlistTable.getPlaylist(playlistId).blockingFirst().get(0).getThumbnailUrl();
}
private Maybe<Integer> modifyPlaylist(final long playlistId,
@Nullable final String name,
@Nullable final String thumbnailUrl) {

View File

@@ -25,12 +25,17 @@ import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.os.Build;
import android.os.IBinder;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.core.app.NotificationCompat;
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.View;
import android.widget.RemoteViews;
@@ -48,6 +53,7 @@ import org.schabi.newpipe.player.helper.LockManager;
import org.schabi.newpipe.player.playqueue.PlayQueueItem;
import org.schabi.newpipe.player.resolver.AudioPlaybackResolver;
import org.schabi.newpipe.player.resolver.MediaSourceTag;
import org.schabi.newpipe.util.BitmapUtils;
import org.schabi.newpipe.util.NavigationHelper;
import org.schabi.newpipe.util.ThemeHelper;
@@ -75,6 +81,7 @@ public final class BackgroundPlayer extends Service {
private BasePlayerImpl basePlayerImpl;
private LockManager lockManager;
private SharedPreferences sharedPreferences;
/*//////////////////////////////////////////////////////////////////////////
// Service-Activity Binder
@@ -95,6 +102,9 @@ public final class BackgroundPlayer extends Service {
private boolean shouldUpdateOnProgress;
private static final int NOTIFICATION_UPDATES_BEFORE_RESET = 60;
private int timesNotificationUpdated;
/*//////////////////////////////////////////////////////////////////////////
// Service's LifeCycle
//////////////////////////////////////////////////////////////////////////*/
@@ -104,6 +114,7 @@ public final class BackgroundPlayer extends Service {
if (DEBUG) Log.d(TAG, "onCreate() called");
notificationManager = ((NotificationManager) getSystemService(NOTIFICATION_SERVICE));
lockManager = new LockManager(this);
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
ThemeHelper.setTheme(this);
basePlayerImpl = new BasePlayerImpl(this);
@@ -180,6 +191,7 @@ public final class BackgroundPlayer extends Service {
private void resetNotification() {
notBuilder = createNotification();
timesNotificationUpdated = 0;
}
private NotificationCompat.Builder createNotification() {
@@ -195,12 +207,45 @@ public final class BackgroundPlayer extends Service {
.setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
.setCustomContentView(notRemoteView)
.setCustomBigContentView(bigNotRemoteView);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
setLockScreenThumbnail(builder);
}
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) {
builder.setPriority(NotificationCompat.PRIORITY_MAX);
}
return builder;
}
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
private void setLockScreenThumbnail(NotificationCompat.Builder builder) {
boolean isLockScreenThumbnailEnabled = sharedPreferences.getBoolean(
getString(R.string.enable_lock_screen_video_thumbnail_key),
true
);
if (isLockScreenThumbnailEnabled) {
basePlayerImpl.mediaSessionManager.setLockScreenArt(
builder,
getCenteredThumbnailBitmap()
);
} else {
basePlayerImpl.mediaSessionManager.clearLockScreenArt(builder);
}
}
@Nullable
private Bitmap getCenteredThumbnailBitmap() {
int screenWidth = Resources.getSystem().getDisplayMetrics().widthPixels;
int screenHeight = Resources.getSystem().getDisplayMetrics().heightPixels;
return BitmapUtils.centerCrop(
basePlayerImpl.getThumbnail(),
screenWidth,
screenHeight);
}
private void setupNotification(RemoteViews remoteViews) {
if (basePlayerImpl == null) return;
@@ -248,10 +293,13 @@ public final class BackgroundPlayer extends Service {
//if (DEBUG) Log.d(TAG, "updateNotification() called with: drawableId = [" + drawableId + "]");
if (notBuilder == null) return;
if (drawableId != -1) {
if (notRemoteView != null) notRemoteView.setImageViewResource(R.id.notificationPlayPause, drawableId);
if (bigNotRemoteView != null) bigNotRemoteView.setImageViewResource(R.id.notificationPlayPause, drawableId);
if (notRemoteView != null)
notRemoteView.setImageViewResource(R.id.notificationPlayPause, drawableId);
if (bigNotRemoteView != null)
bigNotRemoteView.setImageViewResource(R.id.notificationPlayPause, drawableId);
}
notificationManager.notify(NOTIFICATION_ID, notBuilder.build());
timesNotificationUpdated++;
}
/*//////////////////////////////////////////////////////////////////////////
@@ -275,7 +323,8 @@ public final class BackgroundPlayer extends Service {
protected class BasePlayerImpl extends BasePlayer {
@NonNull final private AudioPlaybackResolver resolver;
@NonNull
final private AudioPlaybackResolver resolver;
private int cachedDuration;
private String cachedDurationString;
@@ -294,8 +343,10 @@ public final class BackgroundPlayer extends Service {
super.handleIntent(intent);
resetNotification();
if (bigNotRemoteView != null) bigNotRemoteView.setProgressBar(R.id.notificationProgressBar, 100, 0, false);
if (notRemoteView != null) notRemoteView.setProgressBar(R.id.notificationProgressBar, 100, 0, false);
if (bigNotRemoteView != null)
bigNotRemoteView.setProgressBar(R.id.notificationProgressBar, 100, 0, false);
if (notRemoteView != null)
notRemoteView.setProgressBar(R.id.notificationProgressBar, 100, 0, false);
startForeground(NOTIFICATION_ID, notBuilder.build());
}
@@ -330,6 +381,7 @@ public final class BackgroundPlayer extends Service {
updateNotificationThumbnail();
updateNotification(-1);
}
/*//////////////////////////////////////////////////////////////////////////
// States Implementation
//////////////////////////////////////////////////////////////////////////*/
@@ -351,10 +403,15 @@ public final class BackgroundPlayer extends Service {
updateProgress(currentProgress, duration, bufferPercent);
if (!shouldUpdateOnProgress) return;
resetNotification();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O /*Oreo*/) updateNotificationThumbnail();
if (timesNotificationUpdated > NOTIFICATION_UPDATES_BEFORE_RESET) {
resetNotification();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O /*Oreo*/) {
updateNotificationThumbnail();
}
}
if (bigNotRemoteView != null) {
if(cachedDuration != duration) {
if (cachedDuration != duration) {
cachedDuration = duration;
cachedDurationString = getTimeString(duration);
}
@@ -382,8 +439,10 @@ public final class BackgroundPlayer extends Service {
@Override
public void destroy() {
super.destroy();
if (notRemoteView != null) notRemoteView.setImageViewBitmap(R.id.notificationCover, null);
if (bigNotRemoteView != null) bigNotRemoteView.setImageViewBitmap(R.id.notificationCover, null);
if (notRemoteView != null)
notRemoteView.setImageViewBitmap(R.id.notificationCover, null);
if (bigNotRemoteView != null)
bigNotRemoteView.setImageViewBitmap(R.id.notificationCover, null);
}
/*//////////////////////////////////////////////////////////////////////////

View File

@@ -2,12 +2,19 @@ package org.schabi.newpipe.player.helper;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.media.MediaMetadata;
import android.os.Build;
import android.support.v4.media.MediaMetadataCompat;
import android.support.v4.media.session.MediaSessionCompat;
import android.view.KeyEvent;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.core.app.NotificationCompat;
import androidx.media.session.MediaButtonReceiver;
import androidx.media.app.NotificationCompat.MediaStyle;
import com.google.android.exoplayer2.Player;
import com.google.android.exoplayer2.ext.mediasession.MediaSessionConnector;
@@ -19,8 +26,10 @@ import org.schabi.newpipe.player.mediasession.PlayQueuePlaybackController;
public class MediaSessionManager {
private static final String TAG = "MediaSessionManager";
@NonNull private final MediaSessionCompat mediaSession;
@NonNull private final MediaSessionConnector sessionConnector;
@NonNull
private final MediaSessionCompat mediaSession;
@NonNull
private final MediaSessionConnector sessionConnector;
public MediaSessionManager(@NonNull final Context context,
@NonNull final Player player,
@@ -40,13 +49,45 @@ public class MediaSessionManager {
return MediaButtonReceiver.handleIntent(mediaSession, intent);
}
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public void setLockScreenArt(NotificationCompat.Builder builder, @Nullable Bitmap thumbnailBitmap) {
if (thumbnailBitmap == null || !mediaSession.isActive()) {
return;
}
mediaSession.setMetadata(
new MediaMetadataCompat.Builder()
.putBitmap(MediaMetadata.METADATA_KEY_ALBUM_ART, thumbnailBitmap)
.build()
);
MediaStyle mediaStyle = new MediaStyle()
.setMediaSession(mediaSession.getSessionToken());
builder.setStyle(mediaStyle);
}
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public void clearLockScreenArt(NotificationCompat.Builder builder) {
mediaSession.setMetadata(
new MediaMetadataCompat.Builder()
.putBitmap(MediaMetadata.METADATA_KEY_ALBUM_ART, null)
.build()
);
MediaStyle mediaStyle = new MediaStyle()
.setMediaSession(mediaSession.getSessionToken());
builder.setStyle(mediaStyle);
}
/**
* Should be called on player destruction to prevent leakage.
* */
*/
public void dispose() {
this.sessionConnector.setPlayer(null);
this.sessionConnector.setQueueNavigator(null);
this.mediaSession.setActive(false);
this.mediaSession.release();
}
}
}

View File

@@ -319,6 +319,7 @@ public class MediaSourceManager {
private Observable<Long> getEdgeIntervalSignal() {
return Observable.interval(progressUpdateIntervalMillis, TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread())
.filter(ignored ->
playbackListener.isApproachingPlaybackEdge(playbackNearEndGapMillis));
}

View File

@@ -89,6 +89,13 @@ public class PeertubeInstanceListFragment extends Fragment {
public void onViewCreated(@NonNull View rootView, @Nullable Bundle savedInstanceState) {
super.onViewCreated(rootView, savedInstanceState);
initViews(rootView);
}
private void initViews(@NonNull View rootView) {
TextView instanceHelpTV = rootView.findViewById(R.id.instanceHelpTV);
instanceHelpTV.setText(getString(R.string.peertube_instance_url_help, getString(R.string.peertube_instance_list_url)));
initButton(rootView);
RecyclerView listInstances = rootView.findViewById(R.id.instances);

View File

@@ -0,0 +1,43 @@
package org.schabi.newpipe.util;
import android.graphics.Bitmap;
import androidx.annotation.Nullable;
public class BitmapUtils {
@Nullable
public static Bitmap centerCrop(Bitmap inputBitmap, int newWidth, int newHeight) {
if (inputBitmap == null || inputBitmap.isRecycled()) {
return null;
}
float sourceWidth = inputBitmap.getWidth();
float sourceHeight = inputBitmap.getHeight();
float xScale = newWidth / sourceWidth;
float yScale = newHeight / sourceHeight;
float newXScale;
float newYScale;
if (yScale > xScale) {
newXScale = xScale / yScale;
newYScale = 1.0f;
} else {
newXScale = 1.0f;
newYScale = yScale / xScale;
}
float scaledWidth = newXScale * sourceWidth;
float scaledHeight = newYScale * sourceHeight;
int left = (int) ((sourceWidth - scaledWidth) / 2);
int top = (int) ((sourceHeight - scaledHeight) / 2);
int width = (int) scaledWidth;
int height = (int) scaledHeight;
return Bitmap.createBitmap(inputBitmap, left, top, width, height);
}
}

View File

@@ -140,7 +140,15 @@ public class StreamItemAdapter<T extends Stream, U extends Stream> extends BaseA
if (stream instanceof SubtitlesStream) {
formatNameView.setText(((SubtitlesStream) stream).getLanguageTag());
} else {
formatNameView.setText(stream.getFormat().getName());
switch (stream.getFormat()) {
case WEBMA_OPUS:
// noinspection AndroidLintSetTextI18n
formatNameView.setText("opus");
break;
default:
formatNameView.setText(stream.getFormat().getName());
break;
}
}
qualityView.setText(qualityString);

View File

@@ -0,0 +1,128 @@
package org.schabi.newpipe.views;
import android.content.Context;
import android.os.Build;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import androidx.annotation.NonNull;
import com.google.android.material.tabs.TabLayout;
import com.google.android.material.tabs.TabLayout.Tab;
/**
* A TabLayout that is scrollable when tabs exceed its width.
* Hides when there are less than 2 tabs.
*/
public class ScrollableTabLayout extends TabLayout {
private static final String TAG = ScrollableTabLayout.class.getSimpleName();
private int layoutWidth = 0;
private int prevVisibility = View.GONE;
public ScrollableTabLayout(Context context) {
super(context);
}
public ScrollableTabLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
public ScrollableTabLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
remeasureTabs();
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
layoutWidth = w;
}
@Override
public void addTab(@NonNull Tab tab, int position, boolean setSelected) {
super.addTab(tab, position, setSelected);
hasMultipleTabs();
// Adding a tab won't decrease total tabs' width so tabMode won't have to change to FIXED
if (getTabMode() != MODE_SCROLLABLE) {
remeasureTabs();
}
}
@Override
public void removeTabAt(int position) {
super.removeTabAt(position);
hasMultipleTabs();
// Removing a tab won't increase total tabs' width so tabMode won't have to change to SCROLLABLE
if (getTabMode() != MODE_FIXED) {
remeasureTabs();
}
}
@Override
protected void onVisibilityChanged(View changedView, int visibility) {
super.onVisibilityChanged(changedView, visibility);
// Recheck content width in case some tabs have been added or removed while ScrollableTabLayout was invisible
// We don't have to check if it was GONE because then requestLayout() will be called
if (changedView == this) {
if (prevVisibility == View.INVISIBLE) {
remeasureTabs();
}
prevVisibility = visibility;
}
}
private void setMode(int mode) {
if (mode == getTabMode()) return;
setTabMode(mode);
}
/**
* Make ScrollableTabLayout not visible if there are less than two tabs
*/
private void hasMultipleTabs() {
if (getTabCount() > 1) {
setVisibility(View.VISIBLE);
} else {
setVisibility(View.GONE);
}
}
/**
* Calculate minimal width required by tabs and set tabMode accordingly
*/
private void remeasureTabs() {
if (prevVisibility != View.VISIBLE) return;
if (layoutWidth == 0) return;
final int count = getTabCount();
int contentWidth = 0;
for (int i = 0; i < count; i++) {
View child = getTabAt(i).view;
if (child.getVisibility() == View.VISIBLE) {
// Use tab's minimum requested width should actual content be too small
contentWidth += Math.max(child.getMinimumWidth(), child.getMeasuredWidth());
}
}
if (contentWidth > layoutWidth) {
setMode(TabLayout.MODE_SCROLLABLE);
} else {
setMode(TabLayout.MODE_FIXED);
}
}
}

View File

@@ -5,6 +5,7 @@ import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Build;
@@ -35,6 +36,8 @@ import androidx.recyclerview.widget.RecyclerView;
import androidx.recyclerview.widget.RecyclerView.Adapter;
import androidx.recyclerview.widget.RecyclerView.ViewHolder;
import com.google.android.material.snackbar.Snackbar;
import org.schabi.newpipe.BuildConfig;
import org.schabi.newpipe.R;
import org.schabi.newpipe.extractor.NewPipe;
@@ -46,6 +49,7 @@ import java.io.File;
import java.lang.ref.WeakReference;
import java.net.URI;
import java.util.ArrayList;
import java.util.Iterator;
import us.shandian.giga.get.DownloadMission;
import us.shandian.giga.get.FinishedMission;
@@ -104,8 +108,12 @@ public class MissionAdapter extends Adapter<ViewHolder> implements Handler.Callb
private MenuItem mPauseButton;
private View mEmptyMessage;
private RecoverHelper mRecover;
private View mView;
private ArrayList<Mission> mHidden;
private Snackbar mSnackbar;
private final Runnable rUpdater = this::updater;
private final Runnable rDelete = this::deleteFinishedDownloads;
public MissionAdapter(Context context, @NonNull DownloadManager downloadManager, View emptyMessage, View root) {
mContext = context;
@@ -122,6 +130,10 @@ public class MissionAdapter extends Adapter<ViewHolder> implements Handler.Callb
mDeleter = new Deleter(root, mContext, this, mDownloadManager, mIterator, mHandler);
mView = root;
mHidden = new ArrayList<>();
checkEmptyMessageVisibility();
onResume();
}
@@ -557,9 +569,50 @@ public class MissionAdapter extends Adapter<ViewHolder> implements Handler.Callb
);
}
public void clearFinishedDownloads() {
mDownloadManager.forgetFinishedDownloads();
applyChanges();
public void clearFinishedDownloads(boolean delete) {
if (delete && mIterator.hasFinishedMissions() && mHidden.isEmpty()) {
for (int i = 0; i < mIterator.getOldListSize(); i++) {
FinishedMission mission = mIterator.getItem(i).mission instanceof FinishedMission ? (FinishedMission) mIterator.getItem(i).mission : null;
if (mission != null) {
mIterator.hide(mission);
mHidden.add(mission);
}
}
applyChanges();
String msg = String.format(mContext.getString(R.string.deleted_downloads), mHidden.size());
mSnackbar = Snackbar.make(mView, msg, Snackbar.LENGTH_INDEFINITE);
mSnackbar.setAction(R.string.undo, s -> {
Iterator<Mission> i = mHidden.iterator();
while (i.hasNext()) {
mIterator.unHide(i.next());
i.remove();
}
applyChanges();
mHandler.removeCallbacks(rDelete);
});
mSnackbar.setActionTextColor(Color.YELLOW);
mSnackbar.show();
mHandler.postDelayed(rDelete, 5000);
} else if (!delete) {
mDownloadManager.forgetFinishedDownloads();
applyChanges();
}
}
private void deleteFinishedDownloads() {
if (mSnackbar != null) mSnackbar.dismiss();
Iterator<Mission> i = mHidden.iterator();
while (i.hasNext()) {
Mission mission = i.next();
if (mission != null) {
mDownloadManager.deleteMission(mission);
mContext.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, mission.storage.getUri()));
}
i.remove();
}
}
private boolean handlePopupItem(@NonNull ViewHolderItem h, @NonNull MenuItem option) {

View File

@@ -17,6 +17,7 @@ import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.Toast;
import androidx.annotation.NonNull;
@@ -189,10 +190,12 @@ public class MissionsFragment extends Fragment {
return true;
case R.id.clear_list:
AlertDialog.Builder prompt = new AlertDialog.Builder(mContext);
prompt.setTitle(R.string.clear_finished_download);
prompt.setTitle(R.string.clear_download_history);
prompt.setMessage(R.string.confirm_prompt);
prompt.setPositiveButton(android.R.string.ok, (dialog, which) -> mAdapter.clearFinishedDownloads());
prompt.setNegativeButton(R.string.cancel, null);
// Intentionally misusing button's purpose in order to achieve good order
prompt.setNegativeButton(R.string.clear_download_history, (dialog, which) -> mAdapter.clearFinishedDownloads(false));
prompt.setPositiveButton(R.string.delete_downloaded_files, (dialog, which) -> mAdapter.clearFinishedDownloads(true));
prompt.setNeutralButton(R.string.cancel, null);
prompt.create().show();
return true;
case R.id.start_downloads:

View File

@@ -6,12 +6,13 @@
android:layout_height="match_parent">
<com.google.android.material.tabs.TabLayout
<org.schabi.newpipe.views.ScrollableTabLayout
android:id="@+id/main_tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:background="?attr/colorPrimary"
app:tabMinWidth="60dp"
app:tabGravity="fill"/>
<androidx.viewpager.widget.ViewPager

View File

@@ -24,7 +24,7 @@
<item android:id="@+id/clear_list"
android:visible="false"
android:icon="?attr/ic_delete"
android:title="@string/clear_finished_download"
android:title="@string/clear_download_history"
app:showAsAction="ifRoom" />
<item android:id="@+id/action_settings"

View File

@@ -69,8 +69,8 @@
<string name="enable_watch_history_title">مراقبة السجل</string>
<string name="settings_category_history_title">التاريخ و ذاكرة التخزين المؤقت</string>
<string name="content">محتوى</string>
<string name="downloads">التحميلات</string>
<string name="downloads_title">التحميلات</string>
<string name="downloads">الملفات المحملة</string>
<string name="downloads_title">الملفات المحملة</string>
<string name="all">الجميع</string>
<string name="channel">القناة</string>
<string name="video">الفيديو</string>
@@ -113,11 +113,11 @@
<string name="show_age_restricted_content_title">محتوى مقيد بحسب العمر</string>
<string name="video_is_age_restricted">"إظهار الفيديو المقيد بحسب العمر. يمكن السماح باستخدام هذه المواد من \"الإعدادات\"."</string>
<string name="duration_live">بث مباشر</string>
<string name="error_report_title">تقرير خطأ</string>
<string name="error_report_title">تقرير عن مشكلة</string>
<string name="playlist">قائمة التشغيل</string>
<string name="yes">نعم</string>
<string name="later">لاحقاً</string>
<string name="disabled">تعطيل</string>
<string name="disabled">متوقف</string>
<string name="filter">فلتر</string>
<string name="refresh">تحديث</string>
<string name="clear">تنظيف</string>
@@ -246,12 +246,12 @@
<item quantity="other">%s شاهدو</item>
</plurals>
<plurals name="videos">
<item quantity="zero">فيديو%s video</item>
<item quantity="one">%s videosفيديوهات</item>
<item quantity="two">%s videosفيديوهات</item>
<item quantity="few">%s videosفيديوهات</item>
<item quantity="many">%s videosفيديوهات</item>
<item quantity="other">%s videosفيديوهات</item>
<item quantity="zero">فيديوهات</item>
<item quantity="one">فيديوهات</item>
<item quantity="two">فيديوهات</item>
<item quantity="few">فيديوهات</item>
<item quantity="many">فيديوهات</item>
<item quantity="other">فيديوهات</item>
</plurals>
<string name="recaptcha_request_toast">طلب اختبار الكابتشا مطلوب</string>
<string name="copyright" formatted="true">© %1$sبواسطة%2$sتحت%3$s</string>
@@ -425,8 +425,8 @@
<string name="app_update_notification_channel_name">تتبيه تحديث التطبيق</string>
<string name="volume_gesture_control_title">إيماءة التحكم بالصوت</string>
<string name="events">الأحداث</string>
<string name="app_update_notification_channel_description">"تنبيه عند تواجد إصدار جديد newpipe "</string>
<string name="download_to_sdcard_error_title">وحدة التخزين الخارجية غير متاحة</string>
<string name="app_update_notification_channel_description">إخطارات لنسخة NewPipe الجديدة</string>
<string name="download_to_sdcard_error_title">وحدة التخزين الخارجية غير متوفرة</string>
<string name="download_to_sdcard_error_message">"التنزيل على بطاقة SD الخارجية غير ممكن. إعادة تعيين موقع مجلد التحميل؟"</string>
<string name="saved_tabs_invalid_json">باستخدام علامات التبويب الافتراضية ، خطأ أثناء قراءة علامات التبويب المحفوظة</string>
<string name="restore_defaults">استعادة الضبط الافتراضي</string>
@@ -524,4 +524,35 @@
<string name="no_one_watching">لاتوجد مشاهدة</string>
<string name="no_one_listening">لا أحد يستمع</string>
<string name="localization_changes_requires_app_restart">ستتغير اللغة بمجرد إعادة تشغيل التطبيق.</string>
<plurals name="watching">
<item quantity="zero">مشاهد</item>
<item quantity="one">مشاهدة</item>
<item quantity="two">مشاهدة</item>
<item quantity="few">مشاهدات</item>
<item quantity="many">مشاهدات</item>
<item quantity="other">مشاهدات</item>
</plurals>
<plurals name="listening">
<item quantity="zero">مستمع</item>
<item quantity="one">مستمع</item>
<item quantity="two">مستمعين</item>
<item quantity="few">مستمعين</item>
<item quantity="many">مستمعين</item>
<item quantity="other">مستمعين</item>
</plurals>
<string name="seek_duration_title">تسريع إلى الأمام/-ترجيع وقت البحث</string>
<string name="peertube_instance_url_title">مثيلات خوادم پيرتيوب</string>
<string name="peertube_instance_url_summary">عيّن مثيلات خوادم پيرتيوب التي تُفضّلها</string>
<string name="peertube_instance_add_title">إضافة نموذج</string>
<string name="peertube_instance_add_help">أدخل رابط مثيل الخادم</string>
<string name="peertube_instance_add_fail">فشل في التحقق من مثيل الخادم</string>
<string name="peertube_instance_add_https_only">فقط عناوين https المدعومة</string>
<string name="peertube_instance_add_exists">مثيل الخادم موجود بالفعل</string>
<string name="local">محلي</string>
<string name="recently_added">أضيف مؤخرا</string>
<string name="most_liked">الأكثر إعجابا</string>
<string name="playlist_no_uploader">تم إنشاؤه-تلقائيًا (لم يتم العثور على برنامج تحميل)</string>
<string name="recovering">استرد</string>
<string name="error_download_resource_gone">لا يمكن استرداد هذا التنزيل</string>
<string name="choose_instance_prompt">اختيار مثيل خادم</string>
</resources>

View File

@@ -206,7 +206,7 @@
<string name="caption_setting_title">Sotítulos</string>
<string name="accept">Aceutar</string>
<string name="restore_defaults_confirmation">¿Quies reafitar los valores\?</string>
<string name="error_unknown_host"></string>
<string name="error_unknown_host"/>
<string name="error_http_unsupported_range">El sirvidor nun aceuta descargues multifilu, volvi probar con @string/msg_threads = 1</string>
<string name="no_comments">Nun hai comentarios</string>
<string name="settings_category_clear_data_title">Llimpieza de datos</string>
@@ -243,4 +243,18 @@
<string name="enable_playback_resume_title">Siguir cola reproducción</string>
<string name="main_page_content_summary">Les llingüetes que s\'amuesen na páxina principal</string>
<string name="downloads_storage_ask_title">Entrugar ánde baxar</string>
</resources>
<string name="downloads">Descargues</string>
<string name="downloads_title">Descargues</string>
<plurals name="videos">
<item quantity="one">Vídeos</item>
<item quantity="other"></item>
</plurals>
<string name="player_gesture_controls_title">Control per xestos del reproductor</string>
<string name="preferred_player_fetcher_notification_message">Cargando\'l conteníu solicitáu</string>
<string name="privacy_policy_title">Política de Privacidá de NewPipe</string>
<string name="volume_gesture_control_title">Control per xestos del volume</string>
<string name="brightness_gesture_control_title">Control per xestos del brilléu</string>
<string name="error_file_creation">El ficheru nun pue crease</string>
<string name="error_http_no_content">El sirvidor nun unvia datos</string>
<string name="localization_changes_requires_app_restart">La llingua va camudar namái que se reanicie l\'aplicación.</string>
</resources>

View File

@@ -6,7 +6,7 @@
<string name="open_in_browser">在浏览器中打开</string>
<string name="open_in_popup_mode">在悬浮窗模式下打开</string>
<string name="did_you_mean">您是不是要找:%1$s</string>
<string name="no_player_found_toast">找不到串流播放器 (您可以安裝并使用VLC播放)。</string>
<string name="no_player_found_toast">找不到串流播放器 (您可以安装 VLC 进行播放)。</string>
<string name="controls_download_desc">下载串流文件</string>
<string name="install">安装</string>
<string name="cancel">取消</string>
@@ -16,7 +16,7 @@
<string name="settings">设置</string>
<string name="share_dialog_title">分享给...</string>
<string name="choose_browser">选择浏览器</string>
<string name="download_path_title">视频下载文件夹</string>
<string name="download_path_title">视频下载路径</string>
<string name="download_path_summary">已下载的视频存储在这里</string>
<string name="download_path_dialog_title">请选择下载视频的保存位置</string>
<string name="download_path_audio_summary">已下载的音频存储在这里</string>
@@ -39,10 +39,10 @@
<string name="network_error">网络错误</string>
<plurals name="videos">
<item quantity="one">视频</item>
<item quantity="other"></item>
<item quantity="other"/>
</plurals>
<string name="disabled">禁用</string>
<string name="controls_background_title">背景</string>
<string name="controls_background_title">后台播放</string>
<string name="filter">过滤器</string>
<string name="refresh">刷新</string>
<string name="show_search_suggestions_title">搜索建议</string>
@@ -157,10 +157,10 @@
<string name="drawer_header_description">切换服务,当前选择:</string>
<string name="no_player_found">找不到串流播放器。您想安装 VLC 吗?</string>
<string name="screen_rotation">旋转</string>
<string name="use_external_video_player_title">使用第三方视频播放器</string>
<string name="use_external_audio_player_title">使用第三方视频播放器</string>
<string name="use_external_video_player_title">使用外部视频播放器</string>
<string name="use_external_audio_player_title">使用外部音频播放器</string>
<string name="download_path_audio_title">音频下载文件夹</string>
<string name="autoplay_by_calling_app_summary">从其他应用打开 NewPipe 时播放视频</string>
<string name="autoplay_by_calling_app_summary">从其他应用调用 NewPipe 时播放视频</string>
<string name="default_resolution_title">默认分辨率</string>
<string name="kore_not_found">找不到Kore。是否安装</string>
<string name="show_play_with_kodi_title">显示“用Kodi播放”选项</string>
@@ -180,7 +180,7 @@
<string name="error_report_title">错误报告</string>
<string name="general_error">错误</string>
<string name="could_not_load_thumbnails">无法加载所有缩略图</string>
<string name="youtube_signature_decryption_error">无法解密视频 URL 签名</string>
<string name="youtube_signature_decryption_error">无法解密视频 URL 签名</string>
<string name="parsing_error">无法解析网址</string>
<string name="light_parsing_error">无法完全解析网址</string>
<string name="content_not_available">内容不可用</string>
@@ -209,7 +209,7 @@
\n需要此权限</string>
<string name="reCaptcha_title">reCAPTCHA验证</string>
<string name="recaptcha_request_toast">请求的新的CAPTCHA验证</string>
<string name="popup_mode_share_menu_title">NewPipe悬浮窗模式</string>
<string name="popup_mode_share_menu_title">NewPipe 悬浮窗模式</string>
<string name="popup_playing_toast">在悬浮窗中播放</string>
<string name="default_popup_resolution_title">默认悬浮窗分辨率</string>
<string name="show_higher_resolutions_title">使用更高的分辨率</string>
@@ -219,7 +219,7 @@
<string name="popup_remember_size_pos_summary">记住最后一次使用悬浮窗的大小和位置</string>
<string name="settings_category_popup_title">悬浮窗</string>
<string name="popup_resizing_indicator_title">调整大小</string>
<string name="use_external_video_player_summary">删除“某些”分辨率的音频</string>
<string name="use_external_video_player_summary">部分分辨率的视频将没有声音</string>
<string name="player_gesture_controls_title">播放器手势控制</string>
<string name="player_gesture_controls_summary">使用手势控制播放器的亮度和音量</string>
<string name="show_search_suggestions_summary">显示搜索建议</string>
@@ -234,9 +234,9 @@
<string name="channel_unsubscribed">取消订阅频道</string>
<string name="subscription_change_failed">无法修改订阅</string>
<string name="subscription_update_failed">无法更新订阅</string>
<string name="tab_main">主页</string>
<string name="tab_main">主页</string>
<string name="tab_subscriptions">订阅</string>
<string name="fragment_whats_new">新增功能</string>
<string name="fragment_whats_new">新</string>
<string name="resume_on_audio_focus_gain_title">恢复前台焦点</string>
<string name="resume_on_audio_focus_gain_summary">中断后继续播放(例如突然来电后)</string>
<string name="enable_search_history_title">搜索历史记录</string>
@@ -321,7 +321,7 @@
<string name="could_not_import_all_files">警告:无法导入所有文件。</string>
<string name="override_current_data">这将覆盖当前设置。</string>
<string name="show_info">显示信息</string>
<string name="tab_bookmarks">已收藏</string>
<string name="tab_bookmarks">书签</string>
<string name="delete_stream_history_prompt">确定要从观看历史记录中删除该项吗?</string>
<string name="delete_all_history_prompt">是否确实要从历史记录中删除所有项目?</string>
<string name="title_last_played">最后播放</string>
@@ -483,7 +483,7 @@
<string name="overwrite_finished_warning">命名冲突,已存在具有此名称文件</string>
<string name="overwrite_failed">无法覆盖文件</string>
<string name="download_already_pending">有此名称的已暂停下载</string>
<string name="error_postprocessing_stopped">处理文件时,NewPipe 关闭</string>
<string name="error_postprocessing_stopped">NewPipe 在处理文件时被关闭</string>
<string name="error_insufficient_storage">设备上没有剩余储存空间</string>
<string name="error_progress_lost">进度丢失,文件已被删除</string>
<string name="error_timeout">连接超时</string>
@@ -507,12 +507,33 @@
<string name="no_one_watching">无人在线观看</string>
<plurals name="watching">
<item quantity="one">%s 人在观看</item>
<item quantity="other"></item>
<item quantity="other"/>
</plurals>
<string name="no_one_listening">没人在听</string>
<plurals name="listening">
<item quantity="one">s个听众</item>
<item quantity="one">s 人在听</item>
<item quantity="other"/>
</plurals>
<string name="localization_changes_requires_app_restart">重新启动应用后,语言将更改。</string>
<string name="peertube_instance_url_title">PeerTube 服务器</string>
<string name="peertube_instance_url_summary">设置自己喜欢的PeerTube服务器</string>
<string name="peertube_instance_url_help">查找最适合你的服务器%s</string>
<string name="peertube_instance_add_title">添加服务器</string>
<string name="peertube_instance_add_help">输入服务器网址</string>
<string name="peertube_instance_add_fail">无法验证服务器</string>
<string name="peertube_instance_add_https_only">仅支持 https URL</string>
<string name="peertube_instance_add_exists">该服务器已存在</string>
<string name="local">本地</string>
<string name="recently_added">最近添加</string>
<string name="most_liked">最喜欢的</string>
<string name="playlist_no_uploader">自动生成的(未找到上传者)</string>
<string name="recovering">正在恢复</string>
<string name="error_download_resource_gone">无法恢复此下载</string>
<string name="choose_instance_prompt">选择一个服务器</string>
<string name="seek_duration_title">快进 / 快退的单位时间</string>
<string name="enable_lock_screen_video_thumbnail_title">在锁屏界面显示视频缩略图</string>
<string name="enable_lock_screen_video_thumbnail_summary">在后台播放时,锁屏界面将会显示视频的缩略图</string>
<string name="clear_download_history">清除下载历史记录</string>
<string name="delete_downloaded_files">删除下载了的文件</string>
<string name="deleted_downloads">已删除 %1$s 下载</string>
</resources>

View File

@@ -14,7 +14,7 @@
<string name="did_you_mean">Meintest du: %1$s\?</string>
<string name="share_dialog_title">Teilen mit</string>
<string name="choose_browser">Browser auswählen</string>
<string name="screen_rotation">Drehen des Geräts</string>
<string name="screen_rotation">Bildschirm drehen</string>
<string name="download_path_title">Downloadordner für Videos</string>
<string name="download_path_summary">Heruntergeladene Videodateien werden hier gespeichert</string>
<string name="download_path_dialog_title">Wähle den Downloadordner für Videodateien aus</string>
@@ -79,7 +79,7 @@
<string name="your_comment">Dein Kommentar (auf englisch):</string>
<string name="could_not_get_stream">Konnte keinen Stream abrufen</string>
<string name="autoplay_by_calling_app_title">Automatische Wiedergabe</string>
<string name="autoplay_by_calling_app_summary">Wiedergabe eines Videos, wenn NewPipe von einer anderen App aufgerufen wurde</string>
<string name="autoplay_by_calling_app_summary">Video abspielen, wenn NewPipe von einer anderen App aufgerufen wird</string>
<string name="report_error">Einen Fehler melden</string>
<string name="user_report">Anwenderbericht</string>
<string name="duration_live">LIVE</string>
@@ -123,7 +123,8 @@
<string name="default_video_format_title">Bevorzugtes Videoformat</string>
<string name="popup_playing_toast">Im Pop-up Modus abspielen</string>
<string name="popup_mode_share_menu_title">NewPipe-Pop-up-Modus</string>
<string name="msg_popup_permission">Diese Berechtigung ist für das Öffnen im Pop-up-Modus erforderlich</string>
<string name="msg_popup_permission">Diese Berechtigung ist für das
\nÖffnen im Pop-up-Modus erforderlich</string>
<string name="default_popup_resolution_title">Standardauflösung des Pop-ups</string>
<string name="show_higher_resolutions_title">Höhere Auflösungen anzeigen</string>
<string name="show_higher_resolutions_summary">Nur manche Geräte unterstützen das Abspielen von 2K-/4K-Videos</string>
@@ -202,8 +203,8 @@
</plurals>
<string name="no_videos">Keine Videos</string>
<plurals name="videos">
<item quantity="one">Video</item>
<item quantity="other">Videos</item>
<item quantity="one">%s Video</item>
<item quantity="other">%s Videos</item>
</plurals>
<string name="charset_most_special_characters">Die meisten Sonderzeichen</string>
<string name="item_deleted">Element gelöscht</string>
@@ -278,7 +279,7 @@
<string name="override_current_data">Dies wird deine aktuellen Einstellungen überschreiben.</string>
<string name="show_info">Infos anzeigen</string>
<string name="tab_bookmarks">Lesezeichen für Wiedergabelisten</string>
<string name="controls_add_to_playlist_title">Hinzufügen zu</string>
<string name="controls_add_to_playlist_title">Hinzufügen</string>
<string name="detail_drag_description">Zum Neuordnen ziehen</string>
<string name="create">Erstellen</string>
<string name="delete_one">Einen löschen</string>
@@ -395,7 +396,7 @@
<string name="minimize_on_exit_none_description">Keine</string>
<string name="minimize_on_exit_background_description">Zum Hintergrund-Player minimieren</string>
<string name="minimize_on_exit_popup_description">Zum Popup-Player minimieren</string>
<string name="skip_silence_checkbox">Vorspulen während der Stille</string>
<string name="skip_silence_checkbox">Vorspulen bei Stille</string>
<string name="playback_step">Schritt</string>
<string name="playback_reset">Zurücksetzen</string>
<string name="channels">Kanäle</string>
@@ -488,7 +489,7 @@
<string name="error_postprocessing_stopped">NewPipe wurde während der Verarbeitung der Datei geschlossen</string>
<string name="error_insufficient_storage">Kein Speicherplatz mehr auf dem Gerät</string>
<string name="error_progress_lost">Vorgang abgebrochen, da die Datei gelöscht wurde</string>
<string name="confirm_prompt">Bist Du sicher\?</string>
<string name="confirm_prompt">Möchtest du deinen Downloadverlauf oder alle heruntergeladenen Dateien löschen\?</string>
<string name="enable_queue_limit">Downloadwarteschlange begrenzen</string>
<string name="enable_queue_limit_desc">Ein Download wird zur gleichen Zeit ausgeführt</string>
<string name="start_downloads">Downloads starten</string>
@@ -517,4 +518,25 @@
<item quantity="other">%s Zuhörer</item>
</plurals>
<string name="localization_changes_requires_app_restart">Die Sprache ändert sich, sobald die App neu gestartet wird.</string>
<string name="peertube_instance_url_title">PeerTube-Instanzen</string>
<string name="peertube_instance_url_help">Finde auf %s die Instanzen, die am besten zu dir passen</string>
<string name="peertube_instance_add_title">Instanz hinzufügen</string>
<string name="peertube_instance_add_help">URL der Instanz eingeben</string>
<string name="peertube_instance_add_fail">Validierung der Instanz fehlgeschlagen</string>
<string name="peertube_instance_add_exists">Instanz existiert bereits</string>
<string name="local">Lokal</string>
<string name="recently_added">Kürzlich hinzugefügt</string>
<string name="playlist_no_uploader">Auto-generiert (kein Uploader gefunden)</string>
<string name="choose_instance_prompt">Wähle eine Instanz</string>
<string name="peertube_instance_url_summary">Bevorzugte Peertube-Instanzen auswählen</string>
<string name="peertube_instance_add_https_only">Es werden nur HTTPS-Adressen unterstützt</string>
<string name="seek_duration_title">Dauer der Suche bei schnellem Vor-/Zurückspulen</string>
<string name="most_liked">Am beliebtesten</string>
<string name="recovering">Wiederherstellen</string>
<string name="error_download_resource_gone">Dieser Download kann nicht wiederhergestellt werden</string>
<string name="enable_lock_screen_video_thumbnail_title">Video-Vorschaubild für Sperrbildschirm aktivieren</string>
<string name="enable_lock_screen_video_thumbnail_summary">Bei Verwendung des Hintergrundplayers wird ein Video-Miniaturbild auf dem Sperrbildschirm angezeigt</string>
<string name="clear_download_history">Downloadverlauf löschen</string>
<string name="delete_downloaded_files">Heruntergeladene Dateien löschen</string>
<string name="deleted_downloads">%1$s Downloads gelöscht</string>
</resources>

View File

@@ -206,7 +206,7 @@
<string name="sorry_string">Λυπούμαστε, αυτό δεν έπρεπε να έχει συμβεί.</string>
<string name="error_report_button_text">Αναφορά σφάλματος με ηλεκτρονικό ταχυδρομίο</string>
<string name="error_snackbar_message">Λυπούμαστε, συνέβησαν κάποια σφάλματα.</string>
<string name="info_labels">What:\\nΑίτημα:\\nΓλώσσα περιεχομένου:\\nΥπηρεσία:\\nΏρα GMT:\\nΠακέτο:\\nΈκδοση:\\nΈκδοση λειτουργικού:</string>
<string name="info_labels">Τι:\\nΑίτημα:\\nΓλώσσα περιεχομένου:\\nΥπηρεσία:\\nΏρα GMT:\\nΠακέτο:\\nΈκδοση:\\nΈκδοση λειτουργικού συστήματος:</string>
<string name="user_report">Αναφορά χρήστη</string>
<string name="search_no_results">Κανένα αποτέλεσμα</string>
<string name="empty_subscription_feed_subtitle">Δεν υπάρχει τίποτα εδώ</string>
@@ -516,4 +516,12 @@
</plurals>
<string name="localization_changes_requires_app_restart">Η γλώσσα θα αλλάξει μόλις θα επανεκκινηθεί η εφαρμογή.</string>
<string name="default_kiosk_page_summary">Προεπιλεγμένο περίπτερο</string>
<string name="peertube_instance_add_https_only">Υποστηρίζονται μόνο διευθύνσεις URL HTTPS</string>
<string name="local">Τοπικό</string>
<string name="recently_added">Προστέθηκε πρόσφατα</string>
<string name="playlist_no_uploader">Δημιουργήθηκε αυτόματα (δεν βρέθηκε χρήστης μεταφόρτωσης)</string>
<string name="recovering">Ανάκτηση</string>
<string name="error_download_resource_gone">Δεν είναι δυνατή η ανάκτηση αυτής της λήψης</string>
<string name="enable_lock_screen_video_thumbnail_title">Ενεργοποίηση μικρογραφίας βίντεο στην οθόνη κλειδώματος</string>
<string name="enable_lock_screen_video_thumbnail_summary">Όταν χρησιμοποιείται αναπαραγωγή παρασκηνίου μια μικρογραφία βίντεο θα εμφανίζεται στην οθόνη κλειδώματος</string>
</resources>

View File

@@ -15,9 +15,9 @@
<string name="screen_rotation">turno</string>
<string name="use_external_video_player_title">Uzi eksteran filmetoludilon</string>
<string name="use_external_audio_player_title">Uzi eksteran sonludilon</string>
<string name="default_resolution_title">Defaŭlta distingivo</string>
<string name="play_with_kodi_title">Legi per Kodi</string>
<string name="show_play_with_kodi_title">Montri \"Legi per Kodi\"-opcion</string>
<string name="default_resolution_title">Defaŭlta rezolucio</string>
<string name="play_with_kodi_title">Ludi per Kodi</string>
<string name="show_play_with_kodi_title">Montri \"Ludi per Kodi\"-opcion</string>
<string name="play_audio">Sono</string>
<string name="default_audio_format_title">Defaŭlta sondosierformo</string>
<string name="theme_title">Etoso</string>
@@ -30,8 +30,8 @@
<string name="settings_category_video_audio_title">Filmeto kaj sono</string>
<string name="settings_category_appearance_title">Apero</string>
<string name="settings_category_other_title">Alia</string>
<string name="background_player_playing_toast">Ludado fone</string>
<string name="play_btn_text">Legi</string>
<string name="background_player_playing_toast">Ludanta fone</string>
<string name="play_btn_text">Ludi</string>
<string name="general_error">Eraro</string>
<string name="network_error">Reteraro</string>
<string name="content_not_available">Enhavo malhavebla</string>
@@ -41,12 +41,12 @@
<string name="no_player_found">Neniu elsendlflua ludilo trovita. Ĉu vi volas instali la aplikaĵon VLC\?</string>
<string name="kore_not_found">La aplikaĵo Kore ne estas trovita. Ĉu instali ĝin?</string>
<string name="show_next_and_similar_title">Montri la sekvan filmeton kaj similajn filmetojn</string>
<string name="could_not_load_thumbnails">Ĉiuj miniaturoj ne ŝargeblas</string>
<string name="could_not_load_thumbnails">Ĉiuj bildetoj ne ŝargeblas</string>
<string name="youtube_signature_decryption_error">La subskribo de la ligilo de la filmeto ne malĉifreblas</string>
<string name="parsing_error">La retejo ne analizeblas</string>
<string name="list_thumbnail_view_description">Miniaturo de la antaŭrigardo de la filmeto</string>
<string name="detail_thumbnail_view_description">Legi filmeton, daŭro:</string>
<string name="detail_uploader_thumbnail_view_description">Miniaturo de la bildo de la alŝutinto</string>
<string name="list_thumbnail_view_description">Bildeto de la antaŭrigardo de la filmeto</string>
<string name="detail_thumbnail_view_description">Ludi filmeton, daŭro:</string>
<string name="detail_uploader_thumbnail_view_description">Bildeto de la alŝutinto</string>
<string name="err_dir_create">La elŝutujo \'%1$s\' ne kreeblas</string>
<string name="info_dir_created">Elŝutujo \'%1$s\' kreita</string>
<string name="download_path_title">Elŝutujo por filmetoj</string>
@@ -61,7 +61,7 @@
<string name="error_report_button_text">Signali eraron per retpoŝto</string>
<string name="error_snackbar_action">SIGNALI</string>
<string name="what_device_headline">Informoj:</string>
<string name="your_comment">Via komento (en la angla):</string>
<string name="your_comment">Vian komenton (angle):</string>
<string name="error_details_headline">Detaloj:</string>
<string name="report_error">Signali eraron</string>
<string name="video">Filmeto</string>
@@ -69,9 +69,9 @@
<string name="main_bg_subtitle">Premu serĉo por komenci</string>
<string name="no_player_found_toast">Neniu elsendlflua ludilo trovita (instalu VLC por ludi ĝin).</string>
<string name="open_in_popup_mode">Malfermi en ŝprucfenestron modon</string>
<string name="use_external_video_player_summary">Forigas aŭdion ĉe KELKAJ distingivoj</string>
<string name="use_external_video_player_summary">Forigas aŭdon ĉe KELKAJ rezolucioj</string>
<string name="popup_mode_share_menu_title">NewPipe ŝprucfenestron modon</string>
<string name="subscribe_button_title">Abonu</string>
<string name="subscribe_button_title">Aboni</string>
<string name="subscribed_button_title">Abonita</string>
<string name="channel_unsubscribed">Kanalo malabonita</string>
<string name="subscription_change_failed">Ne povis ŝanĝi abonon</string>
@@ -80,16 +80,16 @@
<string name="show_info">Montri informojn</string>
<string name="tab_main">Ĉefa</string>
<string name="tab_subscriptions">Abonoj</string>
<string name="tab_bookmarks">Legosigno</string>
<string name="tab_bookmarks">Konservitaj ludlistoj</string>
<string name="fragment_whats_new">Kio novas</string>
<string name="controls_background_title">Fono</string>
<string name="controls_popup_title">Ŝprucfenestro</string>
<string name="controls_add_to_playlist_title">Aldonu al</string>
<string name="autoplay_by_calling_app_title">Aŭtomata play</string>
<string name="autoplay_by_calling_app_summary">Legas filmeton kiam NewPipe vokas de alia programo</string>
<string name="default_popup_resolution_title">Defaŭlta distingivo de la ŝprucfenestro</string>
<string name="show_higher_resolutions_title">Montri pli altajn distingivojn</string>
<string name="show_higher_resolutions_summary">Nur kelkaj aparatoj subtenas legante 2K / 4K filmetojn</string>
<string name="autoplay_by_calling_app_summary">Ludas filmeton kiam NewPipe vokas el alia programo</string>
<string name="default_popup_resolution_title">Defaŭlta rezolucio de la ŝprucfenestro</string>
<string name="show_higher_resolutions_title">Montri pli altajn rezoluciojn</string>
<string name="show_higher_resolutions_summary">Nur kelkaj aparatoj subtenas ludi 2K / 4K filmetojn</string>
<string name="default_video_format_title">Defaŭlta fomato de filmeto</string>
<string name="black_theme_title">Nigra</string>
<string name="popup_remember_size_pos_title">Memoru ŝprucfenestron kaj pozicion</string>
@@ -122,7 +122,7 @@
<string name="later">Poste</string>
<string name="msg_popup_permission">Tiu permeso estas necesa por
\nmalfermi en ŝprucfenestro modo</string>
<string name="popup_playing_toast">Leganta en ŝprucfenestro modo</string>
<string name="popup_playing_toast">Ludanta en ŝprucfenestro modo</string>
<string name="disabled">Malaktiva</string>
<string name="filter">Filtri</string>
<string name="refresh">Aktualigi</string>
@@ -133,13 +133,13 @@
<string name="player_gesture_controls_summary">Uzu gestojn por kontroli la brilon kaj volumenon de la ludilo</string>
<string name="show_search_suggestions_title">Serĉi sugestojn</string>
<string name="show_search_suggestions_summary">Montri sugestojn kiam serĉanto</string>
<string name="best_resolution">Plej bona distingivo</string>
<string name="best_resolution">Plej bona rezolucio</string>
<string name="app_description">Libera malpeza torentado ĉe Android.</string>
<string name="settings_category_downloads_title">Elŝuti</string>
<string name="charset_letters_and_digits">Leteroj kaj ciferoj</string>
<string name="charset_most_special_characters">Plej specialaj karakteroj</string>
<string name="resume_on_audio_focus_gain_title">Rekomencu en fokusa gajno</string>
<string name="resume_on_audio_focus_gain_summary">Daŭrigi la legon post la interrompaĵoj (ekzemple telefonadoj)</string>
<string name="resume_on_audio_focus_gain_summary">Daŭrigi la ludon post la interrompaĵoj (ekzemple telefonadoj)</string>
<string name="enable_search_history_title">Serĉa historio</string>
<string name="enable_search_history_summary">Konservi la historio de serĉo lokale</string>
<string name="enable_watch_history_title">Rigardu historion</string>
@@ -205,21 +205,21 @@
<string name="playlist_delete_failure">Ne povis forigi ludlisto.</string>
<string name="settings_category_debug_title">Malcimigi</string>
<string name="auto_queue_title">Auto-vico sekva fluo</string>
<string name="auto_queue_summary">Aŭto-aldoni rilatan enhavon kiam leganta la lasta enhavo en malrepetita atendovico</string>
<string name="auto_queue_summary">Aŭto-aldoni rilatan enhavon kiam ludanta la lasta enhavo en malrepetita atendovico</string>
<string name="file">Dosiero</string>
<string name="invalid_directory">Tia dosierujo ne ekzistas</string>
<string name="invalid_source">Tia dosiero/enhavo ne ekzistas</string>
<string name="file_name_empty_error">Dosiernomo ne povas esti malplena</string>
<string name="error_occurred_detail">Eraro okazis : %1$s</string>
<string name="import_youtube_instructions">Importu Jutubajn abonaĵojn per elŝuti la dosieron de eksporto :
\n
\n1. Iru ĉe tie retpaĝo : %1$s
\n2. Ensalutu kiam oni petas vin
<string name="error_occurred_detail">Eraro okazis: %1$s</string>
<string name="import_youtube_instructions">Importu Jutubajn abonaĵojn per elŝuti la dosieron de eksporto :
\n
\n1. Iru ĉe tiu retpaĝo: %1$s
\n2. Ensalutu kiam oni petas vin
\n3. Elŝuto devus komenci (ĝi estas la dosiero de eksporto)</string>
<string name="import_soundcloud_instructions">Importu Soundcloud-n profilon per elŝuti la dosieron de eksporto :
<string name="import_soundcloud_instructions">Importu Soundcloud-n profilon tajpante ĉu la ligilon, ĉu vian ID :
\n
\n1. Ebligu komputilon modon en krozilo (la retejo malhaveblas por poŝtelefonoj)
\n2. Iru al tie retpaĝo : %1$s
\n2. Iru tien: %1$s
\n3. Ensalutu kiam oni petas vin
\n4. Kopiu la ligilon de profilo ke oni kondikis vin.</string>
<string name="download_thumbnail_summary">Malŝaltu por malebligi ŝarĝajn bildetojn, konservi datumojn kaj uzadon de memoro. Ŝanĝoj forviŝas ambaŭ en-memoro kaj sur-disko bildo kaŝmemoro.</string>
@@ -236,13 +236,13 @@
<string name="clear_search_history_summary">Forviŝi la serĉajn ŝlosilvortojn</string>
<string name="delete_search_history_alert">Ĉu vi volas forviŝi la totalon de la historio de serĉo \?</string>
<string name="search_history_deleted">Historio de serĉo forviŝita.</string>
<string name="limit_mobile_data_usage_title">Limigi distingivo kiam uzanta moveblan datumon</string>
<string name="limit_mobile_data_usage_title">Limigi rezolucio kiam uzanta moveblan datumon</string>
<string name="minimize_on_exit_popup_description">Minimumigi al ŝprucfenestro ludilo</string>
<string name="channels">Kanaloj</string>
<string name="playlists">Ludlistoj</string>
<string name="tracks">Spuroj</string>
<string name="users">Uzantoj</string>
<string name="unsubscribe">Malabonu</string>
<string name="unsubscribe">Malaboni</string>
<string name="tab_new">Nova ongleto</string>
<string name="tab_choose">Elektu ongleton</string>
<string name="volume_gesture_control_title">Kontrolo de volumena gesto</string>
@@ -265,7 +265,7 @@
<string name="conferences">Konferencoj</string>
<string name="show_comments_title">Montri komentojn</string>
<string name="show_comments_summary">Malebligu por malvidigi komentojn</string>
<string name="autoplay_title">Aŭtolego</string>
<string name="autoplay_title">Aŭtoludo</string>
<plurals name="comments">
<item quantity="one">Komentoj</item>
<item quantity="other"/>
@@ -291,8 +291,8 @@
<string name="downloads_storage_ask_summary_kitkat">Oni petos vin kie konservi ĉion elŝutaĵon.
\nElektu AFM se vi volas elŝuti al ekstera SD-karto</string>
<string name="downloads_storage_use_saf_title">Uzu AFM</string>
<string name="downloads_storage_use_saf_summary">La Atinga Framo al la Memoro ebligas elŝuti al ekstera SD-karto.
\nKomento : kelkaj aparatoj ne kongruas</string>
<string name="downloads_storage_use_saf_summary">La Atinga Framo al la Memoro ebligas elŝuti al ekstera SD-karto.
\nKomento: kelkaj aparatoj ne kongruas</string>
<string name="clear_playback_states_title">Forviŝi ludajn poziciojn</string>
<string name="clear_playback_states_summary">Forviŝi la totalon de ludaj pozicioj</string>
<string name="delete_playback_states_alert">Ĉu vi volas forviŝi ĉiujn ludajn poziciojn \?</string>
@@ -342,7 +342,7 @@
<string name="view_on_github">Rigardu ĉe GitHub</string>
<string name="app_license_title">Permesilo de NewPipe</string>
<string name="contribution_encouragement">Ĉu vi havas ideojn pri; traduko, desegnaĵoj ŝanĝoj, purigado de kodo, aŭ realaj masivaj ŝanĝoj—helpo estas ĉiam bonvena. Ju pli oni faras, des pli bonas!</string>
<string name="read_full_license">Legu permesilon</string>
<string name="read_full_license">Legi permesilon</string>
<string name="contribution_title">Kontribui</string>
<string name="settings_file_charset_title">Permesitaj karakteroj en dosiernomoj</string>
<string name="settings_file_replacement_character_summary">Nevalidaj karakteroj estas anstataŭigita kun ĉi tiu valoro</string>
@@ -375,7 +375,7 @@
<string name="no_channel_subscribed_yet">Neniuj kanalaj abonoj ankoraŭ</string>
<string name="select_a_kiosk">Elekti kioskon</string>
<string name="start_here_on_main">Komenci ludi ĉi tie</string>
<string name="start_here_on_background">Komenci ludi en la fono</string>
<string name="start_here_on_background">Komenci ludi fone</string>
<string name="donation_title">Donaci</string>
<string name="donation_encouragement">NewPipe estas programada par volontuoj, elspezante tempo por alporti vin la plej bona sperto. Redonu por helpi programistojn plibonigi NewPipe dum ĝuante tason da kafo.</string>
<string name="give_back">Redoni</string>
@@ -413,7 +413,7 @@
<string name="enable_leak_canary_summary">La monitorado de la memorlikadoj povas frostigi la apon dum la hejta dumpingo</string>
<string name="enable_disposed_exceptions_title">Signali ekster-vivciklajn erarojn</string>
<string name="enable_disposed_exceptions_summary">Perforti signalante neenretigaj Rx esceptoj eksere la fragmento aŭ aktiveco vivciklo post dispono</string>
<string name="invalid_file">La dosiero ne ekzistas aŭ la legopermeso mankas</string>
<string name="invalid_file">La dosiero ne ekzistas aŭ la ludopermeso mankas</string>
<string name="import_export_title">Importi/eksporti</string>
<string name="import_title">Importi</string>
<string name="import_from">Importi el</string>
@@ -437,13 +437,13 @@
<string name="caption_setting_title">Subtitoloj</string>
<string name="caption_setting_description">Modifi la dimension de la teksto kaj la fonajn stilojn de la subtitoloj de la ludilo. Ĝi bezonas restarto de la apo por efektiviĝi.</string>
<string name="one_item_deleted">1 ero forviŝita.</string>
<string name="app_license">NewPipe estas programaro sub rajtoceda permesilo: Vi povas uzi, studi, komuniki kaj plibonigi ĝin kiel vi volas. Precize, vi povas redistribui kaj/aŭ modifi ĝin sub la kondiĉojn de la Ĝenerala Publika Permesilo de GNU, kiel publikigita per la Free Software Foundation, ĉu en la versio 3, ĉu (se vi volas) ajna posta versio.</string>
<string name="app_license">NewPipe estas programaro sub rajtoceda permesilo: Vi povas uzi, studi, komuniki kaj plibonigi ĝin kiel vi volas. Precize, vi povas redistribui kaj/aŭ modifi ĝin sub la kondiĉoj de la Ĝenerala Publika Permesilo de GNU, kiel publikigita per la Free Software Foundation, ĉu en la versio 3, ĉu (se vi volas) ajna posta versio.</string>
<string name="import_settings">Ĉu vi volas ankaŭ importi agordojn\?</string>
<string name="privacy_policy_title">Privateca politiko de NewPipe</string>
<string name="privacy_policy_encouragement">La NewPipe projekto respektas vian privatecon serioze. Konsekvence, la apo ne kolektas ajnan datumo sen via konsento.
<string name="privacy_policy_encouragement">La NewPipe projekto serioze respektas vian privatecon. Konsekvence, la apo ne kolektas ajnan datumo sen via konsento.
\nLa privateco politiko de Newpipe detale eksplikas kion datumon estas sendita kaj stokita kiam vi sendas falegosignalon.</string>
<string name="read_privacy_policy">Legi la privatecan politikon</string>
<string name="start_accept_privacy_policy">Por konformiĝi al la Ĝenerala Datum-Protekta Regularon (GDPR), ni allogas vian atento al la privateca politiko de NewPipe. Bonvolu legi ĝin atentive.
<string name="start_accept_privacy_policy">Por konformiĝi al la Ĝenerala Datum-Protekta Regularon (GDPR), ni allogas vian atenton al la privateca politiko de NewPipe. Bonvolu atentive legi ĝin.
\nVi devas akcepti ĝin por sendi nin la cimsignalo.</string>
<string name="accept">Akcepti</string>
<string name="decline">Rifuzi</string>
@@ -455,7 +455,7 @@
<string name="skip_silence_checkbox">Plirapidigi dum silentoj</string>
<string name="playback_step">Paŝo</string>
<string name="playback_reset">Restarigi</string>
<string name="saved_tabs_invalid_json">Uzante defaŭltajn ongletojn, eraro dum leganta savajn ongletojn</string>
<string name="saved_tabs_invalid_json">Uzante defaŭltajn ongletojn, eraro ludante savajn ongletojn</string>
<string name="restore_defaults">Restaŭri la defaŭltojn</string>
<string name="restore_defaults_confirmation">Ĉu vi volas restaŭri la defaŭltojn \?</string>
<string name="subscribers_count_not_available">Kalkulo de abonantoj malhavebla</string>
@@ -516,4 +516,22 @@
<item quantity="other">%s aŭskultantoj</item>
</plurals>
<string name="localization_changes_requires_app_restart">La lingvo ŝanĝos kiam la apo restartos.</string>
<string name="seek_duration_title">Rapida antaŭen / posten daŭron</string>
<string name="peertube_instance_url_title">Instancoj de PeerTube</string>
<string name="peertube_instance_url_summary">Elekti viajn preferitajn instancojn de PeerTube</string>
<string name="peertube_instance_url_help">Trovu la instancojn kiu vi povus ŝati ĉe %s</string>
<string name="peertube_instance_add_title">Aldoni instanco</string>
<string name="peertube_instance_add_help">Eniri la ligilon de la instanco</string>
<string name="peertube_instance_add_fail">Ne povis validigi instanco</string>
<string name="peertube_instance_add_https_only">Nur HTTPS ligiloj estas subtenitaj</string>
<string name="peertube_instance_add_exists">La instanco jam ekzistas</string>
<string name="local">Loka</string>
<string name="recently_added">Freŝdate ĝisdatigita</string>
<string name="most_liked">La plej ŝatitatj</string>
<string name="playlist_no_uploader">Aŭtomate generita (neniu alŝutilo trovita)</string>
<string name="recovering">Reakiranta</string>
<string name="error_download_resource_gone">Ne povas reakiri tion elŝuton</string>
<string name="choose_instance_prompt">Elektu instancon</string>
<string name="enable_lock_screen_video_thumbnail_title">Enablu bildeta filmeton ĉe ŝlosita ekrano</string>
<string name="enable_lock_screen_video_thumbnail_summary">Uzante la fona ludilo, bildeta filmeto vidiĝos ĉe ŝlosita ekrano</string>
</resources>

View File

@@ -518,4 +518,20 @@
<item quantity="other">%s escuchas</item>
</plurals>
<string name="localization_changes_requires_app_restart">El idioma cambiará luego de que la app sea reiniciada.</string>
<string name="seek_duration_title">Duración de búsqueda al avanzar y/o retroceder</string>
<string name="peertube_instance_url_title">Instancias de PeerTube</string>
<string name="peertube_instance_url_summary">Selecciona tus instancias favoritas de PeerTube</string>
<string name="peertube_instance_url_help">Encuentra las mejores instancias para ti en %s</string>
<string name="peertube_instance_add_title">Agregar instancia</string>
<string name="peertube_instance_add_help">Ingresar URL de la instancia</string>
<string name="peertube_instance_add_fail">No se pudo validar la instancia</string>
<string name="peertube_instance_add_https_only">Sólo URLs con HTTPS son soportados</string>
<string name="peertube_instance_add_exists">La instancia ya existe</string>
<string name="local">Local</string>
<string name="recently_added">Agregados recientemente</string>
<string name="most_liked">Más gustados</string>
<string name="playlist_no_uploader">Generado automáticamente (no se encontró creador)</string>
<string name="choose_instance_prompt">Elige una instancia</string>
<string name="enable_lock_screen_video_thumbnail_title">Habilitar miniatura de video de la pantalla de bloqueo</string>
<string name="enable_lock_screen_video_thumbnail_summary">Al usar el reproductor de fondo, se mostrará una miniatura de video en la pantalla de bloqueo</string>
</resources>

View File

@@ -500,13 +500,13 @@
<string name="download_choose_new_path">Aldatu deskargen karpetak indarrean jartzeko</string>
<string name="no_one_watching">Ez dago inor ikusten</string>
<plurals name="watching">
<item quantity="one">%s ikusten</item>
<item quantity="other">%s ikusten</item>
<item quantity="one">ikusle %s</item>
<item quantity="other">%s ikusle</item>
</plurals>
<string name="no_one_listening">Ez dago inor entzuten</string>
<plurals name="listening">
<item quantity="one">%s entzuten</item>
<item quantity="other">%s entzuten</item>
<item quantity="one">entzule %s</item>
<item quantity="other">%s entzule</item>
</plurals>
<string name="downloads_storage_use_saf_title">SAF erabili</string>
<string name="downloads_storage_use_saf_summary">Biltegian Sartzeko Armazoiak kanpoko SD txartel betera jaitsierak egitea ahalbidetzen du.
@@ -517,4 +517,20 @@
<string name="drawer_header_description">Aktibatu zerbitzua, orain hautatua:</string>
<string name="localization_changes_requires_app_restart">Hizkuntza aldatuko da aplikazioa berrabiarazterakoan.</string>
<string name="default_kiosk_page_summary">Kiosko Lehenetsia</string>
<string name="seek_duration_title">Aurreratze/atzeratze bilaketaren iraupena</string>
<string name="peertube_instance_url_title">PeerTube instantziak</string>
<string name="peertube_instance_url_summary">Hautatu zure gogoko PeerTube instantziak</string>
<string name="peertube_instance_url_help">Aurkitu instantziak hemen: %s</string>
<string name="peertube_instance_add_title">Gehitu instantzia</string>
<string name="peertube_instance_add_help">Sartu instantziaren URLa</string>
<string name="peertube_instance_add_fail">Ezin izan da instantzia balioztatu</string>
<string name="peertube_instance_add_https_only">HTTPS URLak onartzen dira soilik</string>
<string name="peertube_instance_add_exists">Instantzia badago aurretik</string>
<string name="local">Lokala</string>
<string name="recently_added">Berriki gehitua</string>
<string name="most_liked">Gogokoenak</string>
<string name="playlist_no_uploader">Automatikoki sortua (igotzailea ez da aurkitu)</string>
<string name="recovering">berreskuratzen</string>
<string name="error_download_resource_gone">Ezin da deskarga hau berreskuratu</string>
<string name="choose_instance_prompt">Aukeratu instantzia</string>
</resources>

View File

@@ -93,7 +93,7 @@
<string name="add">Nouvelle mission</string>
<string name="finish">OK</string>
<string name="msg_name">Nom du fichier</string>
<string name="msg_threads">Fils de discussion</string>
<string name="msg_threads">Nombre de connexions simultanées</string>
<string name="msg_error">Erreur</string>
<string name="msg_server_unsupported">Serveur non pris en charge</string>
<string name="msg_exists">Fichier déjà existant</string>
@@ -122,7 +122,7 @@
<string name="short_million">M</string>
<string name="msg_popup_permission">Cette autorisation est nécessaire pour
\nutiliser le mode flottant</string>
<string name="controls_background_title">Arrière-plan</string>
<string name="controls_background_title">Lire l\'audio</string>
<string name="controls_popup_title">Flottant</string>
<string name="default_popup_resolution_title">Définition de la fenêtre flottante par défaut</string>
<string name="show_higher_resolutions_title">Afficher des définitions plus élevées</string>
@@ -130,7 +130,7 @@
<string name="default_video_format_title">Format vidéo par défaut</string>
<string name="popup_remember_size_pos_title">Mémoriser les taille et position de la fenêtre flottante</string>
<string name="popup_remember_size_pos_summary">Mémorise les dernières taille et position de la fenêtre flottante</string>
<string name="settings_category_popup_title">Fenêtre flottante</string>
<string name="settings_category_popup_title">Fenêtré</string>
<string name="filter">Filtre</string>
<string name="refresh">Rafraîchir</string>
<string name="clear">Effacer</string>
@@ -185,7 +185,7 @@
<string name="notification_channel_name">Notification NewPipe</string>
<string name="undo">Annuler</string>
<string name="enable_watch_history_summary">Garde un suivi des vidéos vues</string>
<string name="resume_on_audio_focus_gain_title">Reprendre à lobtention de la cible de saisie</string>
<string name="resume_on_audio_focus_gain_title">Reprendre lors du retour dans l\'application</string>
<string name="settings_category_player_title">Lecteur</string>
<string name="settings_category_player_behavior_title">Comportement</string>
<string name="settings_category_history_title">Historique et cache</string>
@@ -275,8 +275,8 @@
<string name="export_data_summary">Exporte lhistorique, les abonnements et les listes de lecture</string>
<string name="export_complete_toast">Exporté</string>
<string name="import_complete_toast">Importé</string>
<string name="no_valid_zip_file">Aucun fichier ZIP valide</string>
<string name="could_not_import_all_files">Avertissement : impossible dimporter tous les fichiers.</string>
<string name="no_valid_zip_file">Fichier ZIP non valide</string>
<string name="could_not_import_all_files">Avertissement: Impossible d\'importer tous les fichiers.</string>
<string name="override_current_data">Cela effacera vos paramètres actuels.</string>
<string name="show_info">Afficher les infos</string>
<string name="tab_bookmarks">Listes de lecture enregistrées</string>
@@ -310,7 +310,7 @@
<string name="use_inexact_seek_title">Utiliser la recherche rapide approximative</string>
<string name="use_inexact_seek_summary">Permet au lecteur daccéder plus rapidement à une position au détriment de la précision</string>
<string name="download_thumbnail_title">Charger les miniatures</string>
<string name="download_thumbnail_summary">Désactiver pour empêcher le chargement des miniatures, afin de réduire lutilisation de la bande passante et de la mémoire. Modifier cette option vide les caches dimage en mémoire vive et sur le disque.</string>
<string name="download_thumbnail_summary">Désactivez pour empêcher le chargement des miniatures afin de réduire lutilisation de la bande passante et de la mémoire. La modification de cette option, vide le cache en mémoire vive et sur le disque.</string>
<string name="thumbnail_cache_wipe_complete_notice">Images en cache effacées</string>
<string name="metadata_cache_wipe_title">Effacer les métadonnées en cache</string>
<string name="metadata_cache_wipe_summary">Efface toutes les données de pages Web en cache</string>
@@ -325,7 +325,7 @@
<string name="drawer_header_action_paceholder_text">Quelque chose va bientôt apparaître ici ;D</string>
<string name="controls_download_desc">Télécharger le fichier de flux</string>
<string name="auto_queue_title">Vidéo suivante en file dattente</string>
<string name="auto_queue_summary">Ajoute automatiquement un flux lié lors de la lecture du dernier flux dans une file dattente sans répétition</string>
<string name="auto_queue_summary">Lecture automatique après la file d\'attente</string>
<string name="settings_category_debug_title">Débogage</string>
<string name="resize_fill">Remplir</string>
<string name="caption_auto_generated">Générés automatiquement</string>
@@ -381,7 +381,7 @@
<string name="app_license">NewPipe est un logiciel sous licence libre copyleft : vous pouvez lutiliser, létudier, le partager et laméliorer comme bon vous semble. Plus précisément, vous pouvez le redistribuer ou le modifier sous les termes de la licence générale publique GNU, comme publiée par la Free Software Foundation, dans sa version 3, ou, à votre convenance, dans une version quelconque version ultérieure.</string>
<string name="privacy_policy_title">Politique de confidentialité de NewPipe</string>
<string name="read_privacy_policy">Lire la politique de confidentialité</string>
<string name="import_settings">Voulez-vous également importer des paramètres\?</string>
<string name="import_settings">Voulez-vous également importer les paramètres\?</string>
<string name="accept">Accepter</string>
<string name="decline">Refuser</string>
<string name="privacy_policy_encouragement">Le projet NewPipe prend votre vie privée très à cœur. Par conséquent, lapplication nenvoie aucune donnée sans votre consentement.
@@ -401,7 +401,7 @@
<string name="minimize_on_exit_summary">Action lors du basculement à une autre application depuis le lecteur vidéo — %s</string>
<string name="minimize_on_exit_none_description">Aucune</string>
<string name="minimize_on_exit_background_description">Minimiser pour lire en arrière-plan</string>
<string name="minimize_on_exit_popup_description">Minimiser pour lire en mode flottant</string>
<string name="minimize_on_exit_popup_description">Basculer vers le mode fenêtré</string>
<string name="unsubscribe">Se désabonner</string>
<string name="tab_new">Nouvel onglet</string>
<string name="tab_choose">Sélectionner un onglet</string>
@@ -421,14 +421,14 @@
<string name="stop">Arrêter</string>
<string name="events">Évènements</string>
<string name="download_to_sdcard_error_message">Impossible de télécharger dans la carte mémoire externe. Voulez-vous réinitialiser lemplacement du dossier de téléchargement\?</string>
<string name="main_page_content_summary">Sélection des onglets à afficher sur la page principale</string>
<string name="main_page_content_summary">Choisir quels onglets seront visibles sur la page principale</string>
<string name="updates_setting_title">Mises à jour</string>
<string name="updates_setting_description">Afficher une notification pour proposer une mise à jour de lapplication lorsquune nouvelle version est disponible</string>
<string name="list">Liste</string>
<string name="grid">Grille</string>
<string name="auto">Auto</string>
<string name="switch_view">Changer de vue</string>
<string name="app_update_notification_content_title">Une mise à jour de NewPipe disponible!</string>
<string name="app_update_notification_content_title">Une mise à jour de NewPipe est disponible !</string>
<string name="app_update_notification_content_text">Appuyer pour télécharger</string>
<string name="missions_header_finished">Terminé</string>
<string name="missions_header_pending">En attente</string>
@@ -443,7 +443,7 @@
<string name="overwrite">Écraser</string>
<string name="overwrite_unrelated_warning">Un fichier avec ce nom existe déjà</string>
<string name="overwrite_finished_warning">Un fichier téléchargé avec ce nom existe déjà</string>
<string name="download_already_running">Il y a un téléchargement en cours avec ce nom</string>
<string name="download_already_running">Il y a déjà un téléchargement en cours avec ce nom</string>
<string name="show_error">Afficher lerreur</string>
<string name="label_code">Code</string>
<string name="error_path_creation">Le dossier de destination ne peut pas être créé</string>
@@ -464,7 +464,7 @@
<string name="error_postprocessing_failed">Le post-traitement a échoué</string>
<string name="max_retry_msg">Nombre maximum de tentatives</string>
<string name="max_retry_desc">Nombre maximum de tentatives avant dannuler le téléchargement</string>
<string name="saved_tabs_invalid_json">Utilisation des onglets par défaut, erreur lors de la lecture des onglets enregistrés</string>
<string name="saved_tabs_invalid_json">En utilisation les onglets par défaut, une erreur est survenue en lisant les onglets sauvegardés</string>
<string name="error_http_unsupported_range">Le serveur naccepte pas les téléchargements multi-fils, veuillez réessayer avec @string/msg_threads = 1</string>
<string name="show_comments_title">Afficher les commentaires</string>
<string name="show_comments_summary">Désactiver pour ne pas afficher les commentaires</string>
@@ -517,4 +517,22 @@
<item quantity="other">%s auditeurs</item>
</plurals>
<string name="localization_changes_requires_app_restart">La langue changera lors du redémarrage de l\'application.</string>
<string name="seek_duration_title">Avance/rembobinage rapide sur une durée</string>
<string name="peertube_instance_url_title">Instances PeerTube</string>
<string name="peertube_instance_url_summary">Choisissez vos instances PeerTube préférées</string>
<string name="peertube_instance_url_help">Cherchez des instances qui pourraient vous intéresser sur %s</string>
<string name="peertube_instance_add_title">Ajouter une instance</string>
<string name="peertube_instance_add_help">Entrez lURL de linstance</string>
<string name="peertube_instance_add_fail">Échec de validation de linstance</string>
<string name="peertube_instance_add_https_only">Sont prises en charge uniquement les URLs en HTTPS</string>
<string name="peertube_instance_add_exists">Linstance existe déjà</string>
<string name="local">Local</string>
<string name="recently_added">Ajoutées récemment</string>
<string name="most_liked">Les plus aimées</string>
<string name="recovering">récupération</string>
<string name="error_download_resource_gone">Impossible de récupérer ce téléchargement</string>
<string name="choose_instance_prompt">Choisissez une instance</string>
<string name="playlist_no_uploader">Généré automatiquement (pas de téléverseur trouvé)</string>
<string name="enable_lock_screen_video_thumbnail_title">Activer la vidéo miniaturisée sur l\'écran de verrouillage</string>
<string name="enable_lock_screen_video_thumbnail_summary">En utilisant le lecteur audio, la miniature de la vidéo sera affichée sur l\'écran de verrouillage</string>
</resources>

View File

@@ -254,7 +254,7 @@
<string name="enqueue_on_popup">הוספה לתור בנגן צף חדש</string>
<string name="start_here_on_main">להתחיל לנגן מכאן</string>
<string name="start_here_on_background">להתחיל לנגן ברקע</string>
<string name="start_here_on_popup">להתחיל לנגן בחלון צף חדש</string>
<string name="start_here_on_popup">להתחיל לנגן בנגן צף חדש</string>
<string name="controls_download_desc">הורדת קובץ הזרמה</string>
<string name="show_info">הצגת מידע</string>
<string name="tab_bookmarks">רשימות נגינה מסומנות</string>
@@ -490,13 +490,13 @@
<string name="watch_history_states_deleted">מיקומי הנגינה נמחקו.</string>
<string name="missing_file">הקובץ הועבר או נמחק</string>
<string name="overwrite_unrelated_warning">כבר קיים קובץ בשם הזה</string>
<string name="overwrite_failed">לא ניתן לשכתב על הקובץ</string>
<string name="overwrite_failed">לא ניתן לשכתב את הקובץ</string>
<string name="download_already_pending">כבר יש הורדה ממתינה בשם הזה</string>
<string name="error_postprocessing_stopped">NewPipe נסגר בזמן העבודה על הקובץ</string>
<string name="error_insufficient_storage">לא נשאר מקום במכשיר</string>
<string name="error_progress_lost">התהליך אבד כיוון שהקובץ נמחק</string>
<string name="error_timeout">החיבור המתין זמן רב מדי</string>
<string name="confirm_prompt">בוודאות\?</string>
<string name="confirm_prompt">למחוק את היסטוריית ההורדות שלך או למחוק את כל הקבצים שהורדת\?</string>
<string name="enable_queue_limit">הגבלת תור ההורדה</string>
<string name="enable_queue_limit_desc">רק הורדה אחת תרוץ בו־זמנית</string>
<string name="start_downloads">התחלת הורדות</string>
@@ -529,4 +529,25 @@
</plurals>
<string name="localization_changes_requires_app_restart">השפה תוחלף עם הפעלת היישומון מחדש.</string>
<string name="default_kiosk_page_summary">קיוסק בררת מחדל</string>
<string name="seek_duration_title">משך קפיצה מהירה קדימה/אחורה</string>
<string name="peertube_instance_url_title">מופעים של PeerTube</string>
<string name="peertube_instance_url_summary">נא לבחור את מופעי ה־PeerTube המועדפים עליך</string>
<string name="peertube_instance_url_help">איתור המופעים שהכי מתאימים לך תחת %s</string>
<string name="peertube_instance_add_title">הוספת מופע</string>
<string name="peertube_instance_add_help">נא להכניס כתובת מופע</string>
<string name="peertube_instance_add_fail">לא ניתן לאמת את המופע</string>
<string name="peertube_instance_add_https_only">יש תמיכה בכתובות HTTPS בלבד</string>
<string name="peertube_instance_add_exists">המופע כבר קיים</string>
<string name="local">מקומי</string>
<string name="recently_added">נוספו לאחרונה</string>
<string name="most_liked">האהובים ביותר</string>
<string name="playlist_no_uploader">נוצרה אוטומטית (לא נמצא מעלה)</string>
<string name="recovering">בשחזור</string>
<string name="error_download_resource_gone">לא ניתן לשחזר את ההורדה הזאת</string>
<string name="choose_instance_prompt">נא לבחור מופע</string>
<string name="enable_lock_screen_video_thumbnail_title">הפעלת תמונה מוקטנת של הסרטון במסך הנעילה</string>
<string name="enable_lock_screen_video_thumbnail_summary">בעת השימוש בנגן הרקע תופיע תמונה מוקטנת של הסרטון על מסך הנעילה</string>
<string name="clear_download_history">מחיקת היסטוריית ההורדות</string>
<string name="delete_downloaded_files">למחוק את הקבצים שהורדתי</string>
<string name="deleted_downloads">נמחקו %1$s הורדות</string>
</resources>

View File

@@ -0,0 +1,37 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="install">Installar</string>
<string name="open_in_browser">Aperir in le navigator</string>
<string name="share">Compartir</string>
<string name="download">Discargar</string>
<string name="search">Cercar</string>
<string name="settings">Configurationes</string>
<string name="share_dialog_title">Compartir con</string>
<string name="choose_browser">Seliger un navigator</string>
<string name="subscribed_button_title">Subscribite</string>
<string name="unsubscribe">Cancellar le subscription</string>
<string name="subscription_change_failed">Non poteva cambiar le subscription</string>
<string name="subscription_update_failed">Non poteva actualisar le subscription</string>
<string name="show_info">Monstrar information</string>
<string name="tab_main">Principal</string>
<string name="tab_subscriptions">Subscriptiones</string>
<string name="tab_new">Nove scheda</string>
<string name="tab_choose">Seliger le scheda</string>
<string name="fragment_whats_new">Novitates</string>
<string name="controls_background_title">Fundo</string>
<string name="controls_popup_title">Emergente</string>
<string name="controls_add_to_playlist_title">Adder a</string>
<string name="download_path_title">Dossier de discarga de video</string>
<string name="download_path_dialog_title">Selige le dossier de discarga pro files de video</string>
<string name="download_path_audio_title">Dossier de discarga de audio</string>
<string name="cancel">Cancellar</string>
<string name="subscribe_button_title">Subscriber</string>
<string name="download_path_audio_dialog_title">Selige le dossier de discarga pro files de audio</string>
<string name="theme_title">Thema</string>
<string name="show_comments_title">Monstrar le commentos</string>
<string name="start_downloads">Initiar discargas</string>
<string name="pause_downloads">Pausar le discargas</string>
<string name="choose_instance_prompt">Seliger un instantia</string>
<string name="error_connect_host">Non poteva connecter con le servitor</string>
<string name="view_count_text">%1$s vistas</string>
</resources>

View File

@@ -510,4 +510,21 @@
<item quantity="other">%s mendengarkan</item>
</plurals>
<string name="localization_changes_requires_app_restart">Bahasa akan diterapkan setelah aplikasi dimulai ulang.</string>
<string name="peertube_instance_url_title">Situs PeerTube</string>
<string name="peertube_instance_url_summary">Pilih situs PeerTube favorit anda</string>
<string name="peertube_instance_url_help">Temukan situs yang sesuai dengan anda di %s</string>
<string name="peertube_instance_add_title">Tambah situs</string>
<string name="peertube_instance_add_help">Masukkan URL situs</string>
<string name="peertube_instance_add_fail">Tidak bisa memvalidasi situs</string>
<string name="peertube_instance_add_https_only">Hanya mendukung URL HTTPS</string>
<string name="peertube_instance_add_exists">Situs sudah ada</string>
<string name="local">Lokal</string>
<string name="recently_added">Baru-baru ini ditambahkan</string>
<string name="most_liked">Disukai terbanyak</string>
<string name="playlist_no_uploader">Dibuat otomatis (pengunggah tidak ditemukan)</string>
<string name="recovering">memulihkan</string>
<string name="error_download_resource_gone">Tidak bisa memulihkan unduhan ini</string>
<string name="choose_instance_prompt">Pilih situs</string>
<string name="enable_lock_screen_video_thumbnail_title">Aktifkan kunci layar thumbnail video</string>
<string name="enable_lock_screen_video_thumbnail_summary">Ketika menggunakan pemutar latar belakang, thumbnail video akan ditampilkan di tampilan kunci layar</string>
</resources>

File diff suppressed because it is too large Load Diff

View File

@@ -331,10 +331,10 @@
<string name="previous_export">이전 내보내기</string>
<string name="subscriptions_import_unsuccessful">구독 목록 가져오기 실패</string>
<string name="subscriptions_export_unsuccessful">구독 목록 내보내기 실패</string>
<string name="import_youtube_instructions">\'YouTube 구독 파일\'을 다운로드해서 구독 목록을 가져올 수 있습니다:
\n
\n1. 이곳으로 가세요: $1$s
\n2. 요청에 따라 로그인을 진행합니다
<string name="import_youtube_instructions">\'YouTube 구독 파일\'을 다운로드해서 구독 목록을 가져올 수 있습니다:
\n
\n1. 이곳으로 가세요: %1$s
\n2. 요청에 따라 로그인을 진행합니다
\n3. 다운로드가 곧 시작 됩니다 (이 파일이 구독 파일입니다)</string>
<string name="import_soundcloud_instructions">SoundCloud 프로필을 가져오시려면 URL 및 ID를 입력해주세요.
\n

Some files were not shown because too many files have changed in this diff Show More