Currently translated at 100.0% (51 of 51 strings)
Translated using Weblate (German)
Currently translated at 56.8% (29 of 51 strings)
Translated using Weblate (Polish)
Currently translated at 99.6% (655 of 657 strings)
Translated using Weblate (Italian)
Currently translated at 100.0% (657 of 657 strings)
Translated using Weblate (French)
Currently translated at 100.0% (657 of 657 strings)
Translated using Weblate (German)
Currently translated at 56.8% (29 of 51 strings)
Translated using Weblate (Sardinian)
Currently translated at 100.0% (657 of 657 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (51 of 51 strings)
Translated using Weblate (Interlingua)
Currently translated at 40.1% (264 of 657 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (657 of 657 strings)
Translated using Weblate (French)
Currently translated at 99.8% (656 of 657 strings)
Translated using Weblate (German)
Currently translated at 100.0% (657 of 657 strings)
Co-authored-by: Ajeje Brazorf <lmelonimamo@yahoo.it>
Co-authored-by: Eric <spice2wolf@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: J. Lavoie <j.lavoie@net-c.ca>
Co-authored-by: Michal L <michalrmsmi@wp.pl>
Co-authored-by: Software In Interlingua <softinterlingua@gmail.com>
Co-authored-by: TiA4f8R <avdivers84@gmail.com>
Co-authored-by: TobiGr <tobigr@mail.de>
Co-authored-by: VfBFan <drop0815@posteo.de>
Co-authored-by: chr56 <chr0056@gmail.com>
Co-authored-by: nautilusx <translate@disroot.org>
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/de/
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/zh_Hans/
Translation: NewPipe/Metadata
Currently translated at 56.0% (28 of 50 strings)
Translated using Weblate (Russian)
Currently translated at 100.0% (657 of 657 strings)
Translated using Weblate (German)
Currently translated at 100.0% (657 of 657 strings)
Translated using Weblate (Interlingua)
Currently translated at 40.0% (263 of 657 strings)
Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (657 of 657 strings)
Translated using Weblate (Indonesian)
Currently translated at 100.0% (657 of 657 strings)
Translated using Weblate (Indonesian)
Currently translated at 100.0% (657 of 657 strings)
Translated using Weblate (Slovak)
Currently translated at 100.0% (657 of 657 strings)
Translated using Weblate (Dutch)
Currently translated at 100.0% (657 of 657 strings)
Translated using Weblate (Hebrew)
Currently translated at 100.0% (657 of 657 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (657 of 657 strings)
Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (657 of 657 strings)
Translated using Weblate (Arabic)
Currently translated at 100.0% (657 of 657 strings)
Translated using Weblate (Greek)
Currently translated at 99.8% (656 of 657 strings)
Translated using Weblate (Italian)
Currently translated at 100.0% (657 of 657 strings)
Translated using Weblate (Russian)
Currently translated at 98.9% (650 of 657 strings)
Translated using Weblate (French)
Currently translated at 99.8% (656 of 657 strings)
Translated using Weblate (German)
Currently translated at 98.9% (650 of 657 strings)
Translated using Weblate (English)
Currently translated at 100.0% (657 of 657 strings)
Translated using Weblate (Interlingua)
Currently translated at 34.6% (222 of 641 strings)
Translated using Weblate (Serbian)
Currently translated at 100.0% (641 of 641 strings)
Translated using Weblate (Serbian)
Currently translated at 16.0% (8 of 50 strings)
Translated using Weblate (Odia)
Currently translated at 4.2% (27 of 641 strings)
Translated using Weblate (Odia)
Currently translated at 2.0% (1 of 50 strings)
Translated using Weblate (Dutch (Belgium))
Currently translated at 99.3% (637 of 641 strings)
Translated using Weblate (Swedish)
Currently translated at 87.3% (560 of 641 strings)
Translated using Weblate (Serbian)
Currently translated at 100.0% (641 of 641 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (641 of 641 strings)
Translated using Weblate (Greek)
Currently translated at 100.0% (641 of 641 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (50 of 50 strings)
Translated using Weblate (French)
Currently translated at 70.0% (35 of 50 strings)
Translated using Weblate (Indonesian)
Currently translated at 100.0% (50 of 50 strings)
Translated using Weblate (Ukrainian)
Currently translated at 8.0% (4 of 50 strings)
Translated using Weblate (Lithuanian)
Currently translated at 4.0% (2 of 50 strings)
Translated using Weblate (Bengali)
Currently translated at 93.7% (601 of 641 strings)
Translated using Weblate (Interlingua)
Currently translated at 34.3% (220 of 641 strings)
Translated using Weblate (Ukrainian)
Currently translated at 8.0% (4 of 50 strings)
Co-authored-by: Andrij Mizyk <andmizyk@gmail.com>
Co-authored-by: David Braz <davidbrazps2@gmail.com>
Co-authored-by: Eric <spice2wolf@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Hritik R <hpujhari7@gmail.com>
Co-authored-by: JY3 <GeeyunJY3@gmail.com>
Co-authored-by: Jacque Fresco <aidter@use.startmail.com>
Co-authored-by: Jeff Huang <s8321414@gmail.com>
Co-authored-by: Juraj Timko <timko@netrix.sk>
Co-authored-by: Kristoffer Grundström <swedishsailfishosuser@tutanota.com>
Co-authored-by: Ldm Public <ldmpub@gmail.com>
Co-authored-by: Louis Morel <louismorel03@outlook.fr>
Co-authored-by: Oymate <dhruboadittya96@gmail.com>
Co-authored-by: Rex_sa <rex.sa@pm.me>
Co-authored-by: S3aBreeze <paperwork@evilcorp.ltd>
Co-authored-by: Software In Interlingua <softinterlingua@gmail.com>
Co-authored-by: Terry Louwers <t.louwers@gmail.com>
Co-authored-by: TobiGr <tobigr@mail.de>
Co-authored-by: Vasilis K <skyhirules@gmail.com>
Co-authored-by: Yaron Shahrabani <sh.yaron@gmail.com>
Co-authored-by: Zhiheng Xu <xeric.2002@gmail.com>
Co-authored-by: bomzhellino <adm.bomzh@gmail.com>
Co-authored-by: chr56 <chr0056@gmail.com>
Co-authored-by: gymka <gymka@archlinux.lt>
Co-authored-by: jul-debug <jul333666@gmail.com>
Co-authored-by: nautilusx <translate@disroot.org>
Co-authored-by: random r <epsilin@yopmail.com>
Co-authored-by: whenwesober <naomi16i_1298q@cikuh.com>
Co-authored-by: Обилић <mudo2233@tutanota.com>
Co-authored-by: Слободан Симић(Slobodan Simić) <slsimic@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/de/
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/fr/
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/id/
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/lt/
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/or/
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/sr/
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/uk/
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/zh_Hans/
Translation: NewPipe/Metadata
* Change the IRC chat button link in the original README
* Change the IRC chat button link in the Spanish README
* Change the IRC chat button link in the Japanese README
* Change the IRC chat button link in the Korean README
* Change the IRC chat button link in the Brazilian Portuguese README
* Change the IRC chat button link in the Romanian README
* Change the IRC chat button link in the Somali README
* Change the IRC chat button link in the Turkish README
- Add early return for invalid sizes to shuffle
- Rename variables to be more descriptive
- Refactor moving list element, removing unnecessary operations
- Unwrap if clause for adding to history because the condition is
guaranteed by the guard clause
- Inline the value 0 for the ReorderEvent
- Update documentation to reflect new changes
Original did not cover the case of when streams is empty and
documentation does not specify any input restrictions.
There's an ambiguity with broadcasting an event between the
documentation and the actual code (see TODO).
Translated using Weblate (French)
Currently translated at 100.0% (641 of 641 strings)
Translated using Weblate (Russian)
Currently translated at 100.0% (641 of 641 strings)
Translated using Weblate (Portuguese)
Currently translated at 100.0% (641 of 641 strings)
Translated using Weblate (Arabic)
Currently translated at 99.6% (639 of 641 strings)
Translated using Weblate (Indonesian)
Currently translated at 100.0% (641 of 641 strings)
Translated using Weblate (Dutch (Belgium))
Currently translated at 97.5% (625 of 641 strings)
Translated using Weblate (Sardinian)
Currently translated at 99.6% (639 of 641 strings)
Translated using Weblate (Portuguese (Portugal))
Currently translated at 100.0% (641 of 641 strings)
Translated using Weblate (English (United Kingdom))
Currently translated at 13.5% (87 of 641 strings)
Translated using Weblate (Italian)
Currently translated at 100.0% (641 of 641 strings)
Translated using Weblate (Dutch)
Currently translated at 99.6% (639 of 641 strings)
Translated using Weblate (Serbian)
Currently translated at 100.0% (641 of 641 strings)
Translated using Weblate (Italian)
Currently translated at 100.0% (641 of 641 strings)
Translated using Weblate (Polish)
Currently translated at 100.0% (641 of 641 strings)
Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (641 of 641 strings)
Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (641 of 641 strings)
Translated using Weblate (Vietnamese)
Currently translated at 100.0% (641 of 641 strings)
Translated using Weblate (Estonian)
Currently translated at 95.9% (615 of 641 strings)
Translated using Weblate (Bengali)
Currently translated at 93.7% (601 of 641 strings)
Translated using Weblate (French)
Currently translated at 100.0% (641 of 641 strings)
Translated using Weblate (Serbian)
Currently translated at 100.0% (641 of 641 strings)
Translated using Weblate (Slovak)
Currently translated at 100.0% (641 of 641 strings)
Translated using Weblate (Lithuanian)
Currently translated at 69.5% (446 of 641 strings)
Translated using Weblate (Spanish)
Currently translated at 99.6% (639 of 641 strings)
Translated using Weblate (Basque)
Currently translated at 100.0% (641 of 641 strings)
Translated using Weblate (Czech)
Currently translated at 100.0% (641 of 641 strings)
Translated using Weblate (Lithuanian)
Currently translated at 100.0% (641 of 641 strings)
Translated using Weblate (Croatian)
Currently translated at 100.0% (641 of 641 strings)
Translated using Weblate (Sardinian)
Currently translated at 100.0% (641 of 641 strings)
Translated using Weblate (English)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Serbian)
Currently translated at 99.8% (638 of 639 strings)
Translated using Weblate (Russian)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Japanese)
Currently translated at 99.5% (636 of 639 strings)
Translated using Weblate (Italian)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Slovenian)
Currently translated at 82.7% (529 of 639 strings)
Translated using Weblate (Slovenian)
Currently translated at 82.7% (529 of 639 strings)
Translated using Weblate (Greek)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Arabic)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Turkish)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Polish)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 99.8% (638 of 639 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 99.8% (638 of 639 strings)
Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Hebrew)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Estonian)
Currently translated at 94.5% (604 of 639 strings)
Translated using Weblate (Norwegian Bokmål)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Hebrew)
Currently translated at 46.0% (23 of 50 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/he/
Translated using Weblate (Serbian)
Currently translated at 16.0% (8 of 50 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/sr/
Translated using Weblate (Chinese (Simplified))
Currently translated at 98.0% (49 of 50 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/zh_Hans/
Translated using Weblate (Estonian)
Currently translated at 10.0% (5 of 50 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/et/
Translated using Weblate (German)
Currently translated at 100.0% (641 of 641 strings)
Translated using Weblate (Japanese)
Currently translated at 100.0% (641 of 641 strings)
Translated using Weblate (Japanese)
Currently translated at 100.0% (641 of 641 strings)
Translated using Weblate (Greek)
Currently translated at 100.0% (641 of 641 strings)
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (641 of 641 strings)
Translated using Weblate (Turkish)
Currently translated at 100.0% (641 of 641 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (641 of 641 strings)
Translated using Weblate (Hebrew)
Currently translated at 100.0% (641 of 641 strings)
Translated using Weblate (Norwegian Bokmål)
Currently translated at 99.6% (639 of 641 strings)
Translated using Weblate (Ukrainian)
Currently translated at 8.0% (4 of 50 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/uk/
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Croatian)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Croatian)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Indonesian)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Bengali (Bangladesh))
Currently translated at 62.1% (397 of 639 strings)
Translated using Weblate (Bengali)
Currently translated at 90.6% (579 of 639 strings)
Translated using Weblate (Italian)
Currently translated at 48.9% (24 of 49 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/it/
Translated using Weblate (Indonesian)
Currently translated at 100.0% (49 of 49 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/id/
Translated using Weblate (Tamazight (Central Atlas))
Currently translated at 32.8% (210 of 639 strings)
Added translation using Weblate (Marathi)
Added translation using Weblate (Marathi)
Translated using Weblate (Spanish)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Hindi)
Currently translated at 85.4% (546 of 639 strings)
Translated using Weblate (Marathi)
Currently translated at 10.9% (70 of 639 strings)
Translated using Weblate (Bengali)
Currently translated at 90.9% (581 of 639 strings)
Translated using Weblate (Bengali)
Currently translated at 20.4% (10 of 49 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/bn/
Translated using Weblate (English)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Hungarian)
Currently translated at 87.6% (560 of 639 strings)
Translated using Weblate (Serbian)
Currently translated at 99.8% (638 of 639 strings)
Translated using Weblate (Portuguese)
Currently translated at 99.8% (638 of 639 strings)
Translated using Weblate (Indonesian)
Currently translated at 99.8% (638 of 639 strings)
Translated using Weblate (Ukrainian)
Currently translated at 99.8% (638 of 639 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 99.8% (638 of 639 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 99.8% (638 of 639 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 99.8% (638 of 639 strings)
Translated using Weblate (Estonian)
Currently translated at 85.4% (546 of 639 strings)
Translated using Weblate (Norwegian Bokmål)
Currently translated at 99.8% (638 of 639 strings)
Translated using Weblate (Bengali)
Currently translated at 91.8% (587 of 639 strings)
Translated using Weblate (Turkish)
Currently translated at 30.6% (15 of 49 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/tr/
Translated using Weblate (Romanian)
Currently translated at 8.1% (4 of 49 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/ro/
Translated using Weblate (Portuguese)
Currently translated at 53.0% (26 of 49 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/pt/
Translated using Weblate (Spanish)
Currently translated at 26.5% (13 of 49 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/es/
Translated using Weblate (Serbian)
Currently translated at 14.2% (7 of 49 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/sr/
Translated using Weblate (Estonian)
Currently translated at 8.1% (4 of 49 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/et/
Translated using Weblate (Estonian)
Currently translated at 8.1% (4 of 49 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/et/
Translated using Weblate (Marathi)
Currently translated at 11.8% (76 of 639 strings)
Translated using Weblate (Serbian)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Hungarian)
Currently translated at 91.7% (586 of 639 strings)
Translated using Weblate (Russian)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Portuguese)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Arabic)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Turkish)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Estonian)
Currently translated at 89.2% (570 of 639 strings)
Translated using Weblate (Serbian)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Italian)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Estonian)
Currently translated at 90.7% (580 of 639 strings)
Bug:
In Downloader view, while deleting items, Snackbars at the
bottom of the UI keep queuing up. You need to wait for all
of them to dismiss themselves for files to actually be
deleted. If you close NewPipe before all snackbars are
dismissed, your files will not be deleted and show up again
next time you start NewPipe.
Fix:
When running append(), trigger the commit() action
immediately and cancel all delayed callbacks for commit().
This prevents Snackbars from stacking up in reverse order.
Fixes: https://github.com/TeamNewPipe/NewPipe/issues/5660
Added translation using Weblate (Latin)
Translated using Weblate (Slovak)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Malayalam)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Ukrainian)
Currently translated at 2.0% (1 of 49 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/uk/
Translated using Weblate (Hebrew)
Currently translated at 44.8% (22 of 49 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/he/
Translated using Weblate (Malayalam)
Currently translated at 6.1% (3 of 49 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/ml/
Translated using Weblate (Indonesian)
Currently translated at 100.0% (49 of 49 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/id/
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (49 of 49 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/zh_Hans/
Translated using Weblate (Somali)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Latin)
Currently translated at 8.1% (52 of 639 strings)
Translated using Weblate (Slovak)
Currently translated at 100.0% (639 of 639 strings)
Added translation using Weblate (Dutch (Middle))
Translated using Weblate (Bengali (Bangladesh))
Currently translated at 62.1% (397 of 639 strings)
Translated using Weblate (Croatian)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Croatian)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Bengali)
Currently translated at 89.6% (573 of 639 strings)
Translated using Weblate (German)
Currently translated at 53.0% (26 of 49 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/de/
Translated using Weblate (Portuguese (Brazil))
Currently translated at 26.5% (13 of 49 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/pt_BR/
Translated using Weblate (Tamazight (Central Atlas))
Currently translated at 31.1% (199 of 639 strings)
Translated using Weblate (Latin)
Currently translated at 16.4% (105 of 639 strings)
Translated using Weblate (Czech)
Currently translated at 100.0% (639 of 639 strings)
Added translation using Weblate (Latin)
Translated using Weblate (Slovak)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Malayalam)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Ukrainian)
Currently translated at 2.0% (1 of 49 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/uk/
Translated using Weblate (Hebrew)
Currently translated at 44.8% (22 of 49 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/he/
Translated using Weblate (Malayalam)
Currently translated at 6.1% (3 of 49 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/ml/
Translated using Weblate (Indonesian)
Currently translated at 100.0% (49 of 49 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/id/
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (49 of 49 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/zh_Hans/
Translated using Weblate (Somali)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Latin)
Currently translated at 8.1% (52 of 639 strings)
Translated using Weblate (Slovak)
Currently translated at 100.0% (639 of 639 strings)
Added translation using Weblate (Dutch (Middle))
Translated using Weblate (Bengali (Bangladesh))
Currently translated at 62.1% (397 of 639 strings)
Translated using Weblate (Croatian)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Croatian)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Bengali)
Currently translated at 89.6% (573 of 639 strings)
Translated using Weblate (German)
Currently translated at 53.0% (26 of 49 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/de/
Translated using Weblate (Portuguese (Brazil))
Currently translated at 26.5% (13 of 49 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/pt_BR/
Translated using Weblate (Tamazight (Central Atlas))
Currently translated at 31.1% (199 of 639 strings)
Translated using Weblate (Latin)
Currently translated at 16.4% (105 of 639 strings)
Translated using Weblate (Czech)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (French)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Japanese)
Currently translated at 99.0% (633 of 639 strings)
Translated using Weblate (Japanese)
Currently translated at 99.0% (633 of 639 strings)
Translated using Weblate (English)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Russian)
Currently translated at 99.8% (638 of 639 strings)
Translated using Weblate (Russian)
Currently translated at 99.8% (638 of 639 strings)
Translated using Weblate (German)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (German)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (German)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (French)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Japanese)
Currently translated at 98.7% (631 of 639 strings)
Translated using Weblate (Italian)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Italian)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Portuguese)
Currently translated at 99.6% (637 of 639 strings)
Translated using Weblate (Basque)
Currently translated at 99.6% (637 of 639 strings)
Translated using Weblate (Greek)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Slovak)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Arabic)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Arabic)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Indonesian)
Currently translated at 99.6% (637 of 639 strings)
Translated using Weblate (Ukrainian)
Currently translated at 93.1% (595 of 639 strings)
Translated using Weblate (Turkish)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Polish)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Polish)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Portuguese (Brazil))
Currently translated at 99.6% (637 of 639 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Hebrew)
Currently translated at 99.6% (637 of 639 strings)
Translated using Weblate (Hindi)
Currently translated at 82.1% (525 of 639 strings)
Translated using Weblate (Portuguese (Portugal))
Currently translated at 99.6% (637 of 639 strings)
Translated using Weblate (German)
Currently translated at 51.0% (24 of 47 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/de/
Translated using Weblate (Arabic)
Currently translated at 72.3% (34 of 47 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/ar/
Translated using Weblate (Slovak)
Currently translated at 4.2% (2 of 47 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/sk/
Translated using Weblate (Somali)
Currently translated at 99.6% (637 of 639 strings)
Translated using Weblate (German)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (German)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Italian)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Indonesian)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Ukrainian)
Currently translated at 94.5% (604 of 639 strings)
Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Vietnamese)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Hindi)
Currently translated at 86.0% (550 of 639 strings)
Translated using Weblate (Tamil)
Currently translated at 37.2% (238 of 639 strings)
Translated using Weblate (Sardinian)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Basque)
Currently translated at 33.3% (16 of 48 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/eu/
Translated using Weblate (Hebrew)
Currently translated at 43.7% (21 of 48 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/he/
Translated using Weblate (Italian)
Currently translated at 45.8% (22 of 48 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/it/
Translated using Weblate (Indonesian)
Currently translated at 100.0% (48 of 48 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/id/
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (48 of 48 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/zh_Hans/
Translated using Weblate (English (United Kingdom))
Currently translated at 13.6% (87 of 639 strings)
Translated using Weblate (Spanish)
Currently translated at 99.5% (636 of 639 strings)
Translated using Weblate (Italian)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Romanian)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Romanian)
Currently translated at 6.2% (3 of 48 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/ro/
Translated using Weblate (Russian)
Currently translated at 10.4% (5 of 48 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/ru/
Translated using Weblate (Russian)
Currently translated at 10.4% (5 of 48 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/ru/
Translated using Weblate (Italian)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Norwegian Bokmål)
Currently translated at 99.6% (637 of 639 strings)
Translated using Weblate (Russian)
Currently translated at 16.6% (8 of 48 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/ru/
Translated using Weblate (German)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Serbian)
Currently translated at 98.4% (629 of 639 strings)
Translated using Weblate (Japanese)
Currently translated at 99.3% (635 of 639 strings)
Translated using Weblate (Arabic)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Indonesian)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Bengali (Bangladesh))
Currently translated at 61.9% (396 of 639 strings)
Translated using Weblate (Tamil)
Currently translated at 38.4% (246 of 639 strings)
Translated using Weblate (Malay)
Currently translated at 64.6% (413 of 639 strings)
Translated using Weblate (Bengali)
Currently translated at 87.9% (562 of 639 strings)
Translated using Weblate (Bengali)
Currently translated at 18.7% (9 of 48 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/bn/
Translated using Weblate (Serbian)
Currently translated at 10.4% (5 of 48 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/sr/
Translated using Weblate (Somali)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Latvian)
Currently translated at 4.1% (2 of 48 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/lv/
Translated using Weblate (Latvian)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Esperanto)
Currently translated at 86.6% (554 of 639 strings)
Translated using Weblate (Dutch)
Currently translated at 100.0% (639 of 639 strings)
Translated using Weblate (Polish)
Currently translated at 52.0% (25 of 48 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/pl/
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (638 of 638 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (638 of 638 strings)
Translated using Weblate (Bengali (Bangladesh))
Currently translated at 62.2% (397 of 638 strings)
Translated using Weblate (Indonesian)
Currently translated at 97.8% (46 of 47 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/id/
Translated using Weblate (Sardinian)
Currently translated at 100.0% (638 of 638 strings)
Translated using Weblate (Hebrew)
Currently translated at 100.0% (638 of 638 strings)
Translated using Weblate (Hebrew)
Currently translated at 100.0% (638 of 638 strings)
Translated using Weblate (Hebrew)
Currently translated at 100.0% (638 of 638 strings)
Translated using Weblate (Hebrew)
Currently translated at 100.0% (638 of 638 strings)
Translated using Weblate (Hebrew)
Currently translated at 100.0% (638 of 638 strings)
Translated using Weblate (Hebrew)
Currently translated at 100.0% (638 of 638 strings)
Translated using Weblate (Hebrew)
Currently translated at 100.0% (638 of 638 strings)
Translated using Weblate (Hebrew)
Currently translated at 100.0% (638 of 638 strings)
Translated using Weblate (Hebrew)
Currently translated at 100.0% (638 of 638 strings)
Translated using Weblate (Hebrew)
Currently translated at 100.0% (638 of 638 strings)
Translated using Weblate (Hebrew)
Currently translated at 100.0% (638 of 638 strings)
Translated using Weblate (Hebrew)
Currently translated at 100.0% (638 of 638 strings)
Translated using Weblate (Hebrew)
Currently translated at 100.0% (638 of 638 strings)
Translated using Weblate (Hebrew)
Currently translated at 100.0% (638 of 638 strings)
Translated using Weblate (Hebrew)
Currently translated at 100.0% (638 of 638 strings)
Translated using Weblate (Hebrew)
Currently translated at 100.0% (638 of 638 strings)
Translated using Weblate (Hebrew)
Currently translated at 100.0% (638 of 638 strings)
Translated using Weblate (Hebrew)
Currently translated at 100.0% (638 of 638 strings)
Translated using Weblate (Hebrew)
Currently translated at 100.0% (638 of 638 strings)
Translated using Weblate (Hebrew)
Currently translated at 100.0% (638 of 638 strings)
Translated using Weblate (Hebrew)
Currently translated at 100.0% (638 of 638 strings)
Translated using Weblate (Hebrew)
Currently translated at 100.0% (638 of 638 strings)
Translated using Weblate (Hebrew)
Currently translated at 100.0% (638 of 638 strings)
Translated using Weblate (Hebrew)
Currently translated at 100.0% (638 of 638 strings)
Translated using Weblate (Hebrew)
Currently translated at 100.0% (638 of 638 strings)
Translated using Weblate (Hungarian)
Currently translated at 84.4% (539 of 638 strings)
Translated using Weblate (Serbian)
Currently translated at 90.5% (578 of 638 strings)
Translated using Weblate (Russian)
Currently translated at 99.6% (636 of 638 strings)
Translated using Weblate (Japanese)
Currently translated at 98.9% (631 of 638 strings)
Translated using Weblate (Italian)
Currently translated at 100.0% (638 of 638 strings)
Translated using Weblate (Portuguese)
Currently translated at 100.0% (638 of 638 strings)
Translated using Weblate (Basque)
Currently translated at 99.8% (637 of 638 strings)
Translated using Weblate (Arabic)
Currently translated at 99.0% (632 of 638 strings)
Translated using Weblate (Indonesian)
Currently translated at 100.0% (638 of 638 strings)
Translated using Weblate (Turkish)
Currently translated at 100.0% (638 of 638 strings)
Translated using Weblate (Polish)
Currently translated at 100.0% (638 of 638 strings)
Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (638 of 638 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (638 of 638 strings)
Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (638 of 638 strings)
Translated using Weblate (Hebrew)
Currently translated at 100.0% (638 of 638 strings)
Translated using Weblate (Finnish)
Currently translated at 100.0% (638 of 638 strings)
Translated using Weblate (Portuguese (Portugal))
Currently translated at 100.0% (638 of 638 strings)
Translated using Weblate (Bengali)
Currently translated at 87.7% (560 of 638 strings)
Translated using Weblate (Basque)
Currently translated at 31.9% (15 of 47 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/eu/
Translated using Weblate (Hebrew)
Currently translated at 42.5% (20 of 47 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/he/
Translated using Weblate (Italian)
Currently translated at 44.6% (21 of 47 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/it/
Translated using Weblate (Indonesian)
Currently translated at 100.0% (47 of 47 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/id/
Translated using Weblate (Indonesian)
Currently translated at 100.0% (47 of 47 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/id/
Translated using Weblate (Slovak)
Currently translated at 4.2% (2 of 47 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/sk/
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (47 of 47 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/zh_Hans/
Translated using Weblate (Vietnamese)
Currently translated at 99.6% (636 of 638 strings)
AppCompatImageButton ignores "tint" theme attribute on API 19, therefore, they had to be specified directly, these attributes can be removed after the KitKat support is dropped.
Translated using Weblate (German)
Currently translated at 100.0% (638 of 638 strings)
Translated using Weblate (French)
Currently translated at 100.0% (638 of 638 strings)
Translated using Weblate (Greek)
Currently translated at 100.0% (638 of 638 strings)
Translated using Weblate (Arabic)
Currently translated at 100.0% (638 of 638 strings)
Translated using Weblate (Indonesian)
Currently translated at 100.0% (638 of 638 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (638 of 638 strings)
Translated using Weblate (Hebrew)
Currently translated at 100.0% (638 of 638 strings)
Translated using Weblate (Croatian)
Currently translated at 100.0% (638 of 638 strings)
Translated using Weblate (Norwegian Bokmål)
Currently translated at 100.0% (638 of 638 strings)
Translated using Weblate (German)
Currently translated at 48.9% (23 of 47 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/de/
Translated using Weblate (Hebrew)
Currently translated at 40.4% (19 of 47 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/he/
Translated using Weblate (Arabic)
Currently translated at 68.0% (32 of 47 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/ar/
Translated using Weblate (Somali)
Currently translated at 100.0% (638 of 638 strings)
Translated using Weblate (French)
Currently translated at 100.0% (633 of 633 strings)
Translated using Weblate (Indonesian)
Currently translated at 23.9% (11 of 46 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/id/
Translated using Weblate (German)
Currently translated at 100.0% (633 of 633 strings)
Translated using Weblate (German)
Currently translated at 100.0% (633 of 633 strings)
Translated using Weblate (German)
Currently translated at 100.0% (633 of 633 strings)
Translated using Weblate (German)
Currently translated at 100.0% (633 of 633 strings)
Translated using Weblate (German)
Currently translated at 100.0% (633 of 633 strings)
Translated using Weblate (German)
Currently translated at 100.0% (633 of 633 strings)
Translated using Weblate (German)
Currently translated at 100.0% (633 of 633 strings)
Translated using Weblate (German)
Currently translated at 100.0% (633 of 633 strings)
Translated using Weblate (French)
Currently translated at 100.0% (633 of 633 strings)
Translated using Weblate (French)
Currently translated at 100.0% (633 of 633 strings)
Translated using Weblate (Italian)
Currently translated at 100.0% (633 of 633 strings)
Translated using Weblate (Portuguese)
Currently translated at 100.0% (633 of 633 strings)
Translated using Weblate (Slovenian)
Currently translated at 77.2% (489 of 633 strings)
Translated using Weblate (Greek)
Currently translated at 100.0% (633 of 633 strings)
Translated using Weblate (Polish)
Currently translated at 99.8% (632 of 633 strings)
Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (633 of 633 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (633 of 633 strings)
Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (633 of 633 strings)
Translated using Weblate (Sardinian)
Currently translated at 100.0% (633 of 633 strings)
Translated using Weblate (Portuguese (Portugal))
Currently translated at 100.0% (633 of 633 strings)
Translated using Weblate (Santali)
Currently translated at 12.9% (82 of 633 strings)
Translated using Weblate (English (United Kingdom))
Currently translated at 13.5% (86 of 633 strings)
Translated using Weblate (Somali)
Currently translated at 100.0% (633 of 633 strings)
Translated using Weblate (German)
Currently translated at 100.0% (633 of 633 strings)
Translated using Weblate (French)
Currently translated at 100.0% (633 of 633 strings)
Translated using Weblate (Japanese)
Currently translated at 99.5% (630 of 633 strings)
Translated using Weblate (Korean)
Currently translated at 82.9% (525 of 633 strings)
Translated using Weblate (Italian)
Currently translated at 100.0% (633 of 633 strings)
Translated using Weblate (Greek)
Currently translated at 100.0% (633 of 633 strings)
Translated using Weblate (Esperanto)
Currently translated at 87.0% (551 of 633 strings)
Translated using Weblate (Arabic)
Currently translated at 100.0% (633 of 633 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (633 of 633 strings)
Translated using Weblate (Catalan)
Currently translated at 97.9% (620 of 633 strings)
Translated using Weblate (Dutch (Belgium))
Currently translated at 97.1% (615 of 633 strings)
Translated using Weblate (Malayalam)
Currently translated at 89.4% (566 of 633 strings)
Translated using Weblate (German)
Currently translated at 100.0% (633 of 633 strings)
Translated using Weblate (French)
Currently translated at 100.0% (633 of 633 strings)
Translated using Weblate (Dutch)
Currently translated at 100.0% (633 of 633 strings)
Translated using Weblate (Basque)
Currently translated at 100.0% (633 of 633 strings)
Translated using Weblate (Greek)
Currently translated at 100.0% (633 of 633 strings)
Translated using Weblate (Turkish)
Currently translated at 100.0% (633 of 633 strings)
Translated using Weblate (Catalan)
Currently translated at 100.0% (633 of 633 strings)
Currently translated at 62.8% (396 of 630 strings)
Translated using Weblate (Bengali)
Currently translated at 86.5% (545 of 630 strings)
Translated using Weblate (Bengali)
Currently translated at 19.5% (9 of 46 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/bn/
Translated using Weblate (Chinese (Simplified))
Currently translated at 84.7% (39 of 46 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/zh_Hans/
Translated using Weblate (Chinese (Simplified))
Currently translated at 84.7% (39 of 46 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/zh_Hans/
Translated using Weblate (Indonesian)
Currently translated at 99.0% (624 of 630 strings)
Translated using Weblate (Odia)
Currently translated at 0.0% (0 of 46 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/or/
Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (630 of 630 strings)
Translated using Weblate (Sardinian)
Currently translated at 100.0% (630 of 630 strings)
Translated using Weblate (Spanish)
Currently translated at 100.0% (630 of 630 strings)
Translated using Weblate (French)
Currently translated at 99.6% (628 of 630 strings)
Translated using Weblate (Japanese)
Currently translated at 100.0% (630 of 630 strings)
Translated using Weblate (Italian)
Currently translated at 100.0% (630 of 630 strings)
Translated using Weblate (Portuguese)
Currently translated at 100.0% (630 of 630 strings)
Translated using Weblate (Greek)
Currently translated at 100.0% (630 of 630 strings)
Translated using Weblate (Slovak)
Currently translated at 100.0% (630 of 630 strings)
Translated using Weblate (Arabic)
Currently translated at 100.0% (630 of 630 strings)
Translated using Weblate (Polish)
Currently translated at 99.6% (628 of 630 strings)
Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (630 of 630 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (630 of 630 strings)
Translated using Weblate (Hebrew)
Currently translated at 100.0% (630 of 630 strings)
Translated using Weblate (Estonian)
Currently translated at 72.6% (458 of 630 strings)
Translated using Weblate (Norwegian Bokmål)
Currently translated at 100.0% (630 of 630 strings)
Translated using Weblate (Norwegian Bokmål)
Currently translated at 100.0% (630 of 630 strings)
Translated using Weblate (Danish)
Currently translated at 63.8% (402 of 630 strings)
Translated using Weblate (Portuguese (Portugal))
Currently translated at 100.0% (630 of 630 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 86.9% (40 of 46 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/zh_Hans/
Translated using Weblate (Polish)
Currently translated at 99.6% (628 of 630 strings)
Translated using Weblate (Polish)
Currently translated at 99.6% (628 of 630 strings)
Translated using Weblate (German)
Currently translated at 100.0% (630 of 630 strings)
Translated using Weblate (Indonesian)
Currently translated at 100.0% (630 of 630 strings)
Translated using Weblate (Turkish)
Currently translated at 100.0% (630 of 630 strings)
Translated using Weblate (Polish)
Currently translated at 100.0% (630 of 630 strings)
Translated using Weblate (Estonian)
Currently translated at 78.8% (497 of 630 strings)
Translated using Weblate (Malay)
Currently translated at 65.7% (414 of 630 strings)
Translated using Weblate (Indonesian)
Currently translated at 21.7% (10 of 46 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/id/
Translated using Weblate (Portuguese (Portugal))
Currently translated at 56.5% (26 of 46 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/pt_PT/
This was caused by too large end screen thumbnails enlarging the whole palyer. Fixed by scaling the thumbnail.
Ensure that the player does not use the whole screen height in detail fragment to keep the additional content like title, comments, etc. available.
It will be shown even when nothing could be loaded not due to a network error, and the user can choose to ignore or report it.
Also improve error reporting arguments
Also completely refactor error activity
Also improve some code here and there
I think the settings key "last_resize_mode" is ambiguous. While it is used to get the recently used resize mode, someone thought while working on the resize mode switcher, that the old (to be replaced) resize mode should be stored.
Fixes#5613
Translated using Weblate (Russian)
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (French)
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Russian)
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Czech)
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Turkish)
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (French)
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Italian)
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Portuguese)
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Slovenian)
Currently translated at 75.1% (469 of 624 strings)
Translated using Weblate (Greek)
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Polish)
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Hebrew)
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Albanian)
Currently translated at 98.2% (613 of 624 strings)
Translated using Weblate (Norwegian Bokmål)
Currently translated at 96.4% (602 of 624 strings)
Translated using Weblate (Portuguese (Portugal))
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Kurdish (Northern))
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (German)
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Greek)
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Arabic)
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Portuguese (Portugal))
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Bengali)
Currently translated at 84.2% (526 of 624 strings)
Translated using Weblate (Somali)
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Spanish)
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Spanish)
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Spanish)
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Slovak)
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Vietnamese)
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Russian)
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Indonesian)
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Somali)
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Hungarian)
Currently translated at 68.1% (425 of 624 strings)
Translated using Weblate (Lithuanian)
Currently translated at 51.1% (319 of 624 strings)
Translated using Weblate (Lithuanian)
Currently translated at 51.1% (319 of 624 strings)
Added translation using Weblate (Arabic (Najdi))
Added translation using Weblate (Kurdish (Northern))
Translated using Weblate (Spanish)
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Hungarian)
Currently translated at 68.1% (425 of 624 strings)
Translated using Weblate (Turkish)
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Lithuanian)
Currently translated at 51.2% (320 of 624 strings)
Translated using Weblate (Kurdish)
Currently translated at 97.7% (610 of 624 strings)
Translated using Weblate (Catalan)
Currently translated at 99.5% (621 of 624 strings)
Translated using Weblate (Latvian)
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Kurdish (Northern))
Currently translated at 63.1% (394 of 624 strings)
Added translation using Weblate (Sinhala)
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Filipino)
Currently translated at 12.5% (78 of 624 strings)
Translated using Weblate (Kurdish (Northern))
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Sinhala)
Currently translated at 4.8% (30 of 624 strings)
Added translation using Weblate (Swahili)
Added translation using Weblate (Sicilian)
Translated using Weblate (Greek)
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Santali)
Currently translated at 12.8% (80 of 624 strings)
Translated using Weblate (Portuguese)
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Bengali (Bangladesh))
Currently translated at 63.6% (397 of 624 strings)
Translated using Weblate (Japanese)
Currently translated at 97.7% (609 of 623 strings)
Translated using Weblate (Japanese)
Currently translated at 97.7% (609 of 623 strings)
Translated using Weblate (Japanese)
Currently translated at 97.7% (609 of 623 strings)
Translated using Weblate (Japanese)
Currently translated at 97.7% (609 of 623 strings)
Translated using Weblate (Japanese)
Currently translated at 97.7% (609 of 623 strings)
Translated using Weblate (Japanese)
Currently translated at 97.7% (609 of 623 strings)
Translated using Weblate (Japanese)
Currently translated at 98.0% (611 of 623 strings)
Translated using Weblate (Japanese)
Currently translated at 98.0% (611 of 623 strings)
Translated using Weblate (Japanese)
Currently translated at 98.5% (614 of 623 strings)
Translated using Weblate (Japanese)
Currently translated at 98.5% (614 of 623 strings)
Translated using Weblate (Italian)
Currently translated at 100.0% (623 of 623 strings)
Translated using Weblate (Greek)
Currently translated at 100.0% (623 of 623 strings)
Translated using Weblate (Slovak)
Currently translated at 100.0% (623 of 623 strings)
Translated using Weblate (Turkish)
Currently translated at 100.0% (623 of 623 strings)
Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (623 of 623 strings)
Translated using Weblate (Hebrew)
Currently translated at 100.0% (623 of 623 strings)
Translated using Weblate (Turkish)
Currently translated at 30.2% (13 of 43 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/tr/
Translated using Weblate (Hebrew)
Currently translated at 34.8% (15 of 43 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/he/
Translated using Weblate (Somali)
Currently translated at 100.0% (623 of 623 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (623 of 623 strings)
Translated using Weblate (German)
Currently translated at 100.0% (623 of 623 strings)
Translated using Weblate (Russian)
Currently translated at 100.0% (623 of 623 strings)
Translated using Weblate (Polish)
Currently translated at 99.5% (620 of 623 strings)
Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (623 of 623 strings)
Translated using Weblate (Urdu)
Currently translated at 89.2% (556 of 623 strings)
Translated using Weblate (Hebrew)
Currently translated at 36.3% (16 of 44 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/he/
Translated using Weblate (Italian)
Currently translated at 47.7% (21 of 44 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/it/
Translated using Weblate (Chinese (Simplified))
Currently translated at 86.3% (38 of 44 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/zh_Hans/
Translated using Weblate (Somali)
Currently translated at 100.0% (623 of 623 strings)
Translated using Weblate (Somali)
Currently translated at 4.5% (2 of 44 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/so/
Translated using Weblate (Turkish)
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (German)
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (French)
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Russian)
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Italian)
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Portuguese)
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Basque)
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Greek)
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Romanian)
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Czech)
Currently translated at 99.5% (621 of 624 strings)
Translated using Weblate (Arabic)
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Indonesian)
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Ukrainian)
Currently translated at 91.3% (570 of 624 strings)
Translated using Weblate (Polish)
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Hebrew)
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Finnish)
Currently translated at 98.7% (616 of 624 strings)
Translated using Weblate (Azerbaijani)
Currently translated at 46.6% (291 of 624 strings)
Translated using Weblate (Norwegian Bokmål)
Currently translated at 96.4% (602 of 624 strings)
Translated using Weblate (Sardinian)
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Portuguese (Portugal))
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Greek)
Currently translated at 34.0% (15 of 44 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/el/
Translated using Weblate (Basque)
Currently translated at 31.8% (14 of 44 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/eu/
Translated using Weblate (Ukrainian)
Currently translated at 2.2% (1 of 44 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/uk/
Translated using Weblate (Hebrew)
Currently translated at 36.3% (16 of 44 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/he/
Translated using Weblate (Arabic)
Currently translated at 68.1% (30 of 44 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/ar/
Translated using Weblate (Chinese (Traditional))
Currently translated at 81.8% (36 of 44 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/zh_Hant/
Translated using Weblate (Norwegian Bokmål)
Currently translated at 20.4% (9 of 44 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/nb_NO/
Translated using Weblate (Somali)
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Hindi)
Currently translated at 82.3% (514 of 624 strings)
Translated using Weblate (Hungarian)
Currently translated at 68.1% (425 of 624 strings)
Translated using Weblate (Dutch)
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Japanese)
Currently translated at 98.8% (617 of 624 strings)
Translated using Weblate (Indonesian)
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Portuguese (Brazil))
Currently translated at 99.5% (621 of 624 strings)
Translated using Weblate (Vietnamese)
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Croatian)
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Vietnamese)
Currently translated at 47.7% (21 of 44 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/vi/
Translated using Weblate (Somali)
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Finnish)
Currently translated at 98.8% (617 of 624 strings)
Translated using Weblate (Japanese)
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Japanese)
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Japanese)
Currently translated at 15.9% (7 of 44 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/ja/
Translated using Weblate (Japanese)
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Italian)
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Czech)
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Bengali (Bangladesh))
Currently translated at 63.6% (397 of 624 strings)
Translated using Weblate (Finnish)
Currently translated at 99.6% (622 of 624 strings)
Translated using Weblate (Finnish)
Currently translated at 99.6% (622 of 624 strings)
Translated using Weblate (Bengali)
Currently translated at 80.2% (501 of 624 strings)
Translated using Weblate (Japanese)
Currently translated at 15.9% (7 of 44 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/ja/
Translated using Weblate (Kurdish (Central))
Currently translated at 2.2% (1 of 44 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/ckb/
Translated using Weblate (Santali)
Currently translated at 12.6% (79 of 624 strings)
Translated using Weblate (Somali)
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Somali)
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Somali)
Currently translated at 100.0% (624 of 624 strings)
Added translation using Weblate (Latvian)
Translated using Weblate (Greek)
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Hebrew)
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Somali)
Currently translated at 100.0% (624 of 624 strings)
Translated using Weblate (Latvian)
Currently translated at 4.5% (2 of 44 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/lv/
Fix a bug in which NewPipe doesn't fall back to Google Play Store web url in InstallApp
Fusion getDefaultBrowserPackageName and getDefaultAppPackageName, rename openInDefaultApp to openAppChooser
Update some JavaDocs
When it's expired it means, that the app should get the data. Meaning it should not abort prematurely by returning null.
Co-authored-by: Tobias Groza <TobiGr@users.noreply.github.com>
* Add files via upload
* Add files via upload
* Update README.ro.md
* Add Romanian README link
* Add Romanian README link
* Update README.ja.md
* Add Romanian README link
* Add Romanian README link
* Add Romanian README link
Fix crash when no browser is present and use an ACTION_CHOOSER intent for app update notification
Show a Toast when no app is present on user's device to open a content in an app and in a browser and use an ACTION_CHOOSER intent with the ACTION_VIEW intent put as an extra intent in the update notification.
Translated using Weblate (Kabyle)
Currently translated at 2.3% (1 of 43 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/kab/
Translated using Weblate (Polish)
Currently translated at 99.5% (613 of 616 strings)
Translated using Weblate (German)
Currently translated at 99.8% (615 of 616 strings)
Translated using Weblate (Basque)
Currently translated at 100.0% (616 of 616 strings)
Translated using Weblate (Greek)
Currently translated at 100.0% (616 of 616 strings)
Translated using Weblate (Czech)
Currently translated at 100.0% (616 of 616 strings)
Translated using Weblate (Arabic)
Currently translated at 96.9% (597 of 616 strings)
Translated using Weblate (Indonesian)
Currently translated at 99.6% (614 of 616 strings)
Translated using Weblate (Polish)
Currently translated at 99.6% (614 of 616 strings)
Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (616 of 616 strings)
Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (616 of 616 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (616 of 616 strings)
Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (616 of 616 strings)
Translated using Weblate (Hebrew)
Currently translated at 100.0% (616 of 616 strings)
Translated using Weblate (Croatian)
Currently translated at 100.0% (616 of 616 strings)
Translated using Weblate (Sardinian)
Currently translated at 99.0% (610 of 616 strings)
Translated using Weblate (Portuguese (Brazil))
Currently translated at 27.9% (12 of 43 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/pt_BR/
Translated using Weblate (Basque)
Currently translated at 30.2% (13 of 43 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/eu/
Translated using Weblate (Czech)
Currently translated at 6.9% (3 of 43 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/cs/
Translated using Weblate (Hebrew)
Currently translated at 32.5% (14 of 43 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/he/
Translated using Weblate (Polish)
Currently translated at 53.4% (23 of 43 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/pl/
Translated using Weblate (Somali)
Currently translated at 100.0% (616 of 616 strings)
Translated using Weblate (Somali)
Currently translated at 100.0% (616 of 616 strings)
Translated using Weblate (German)
Currently translated at 100.0% (616 of 616 strings)
Translated using Weblate (French)
Currently translated at 100.0% (616 of 616 strings)
Translated using Weblate (Italian)
Currently translated at 100.0% (616 of 616 strings)
Translated using Weblate (Norwegian Bokmål)
Currently translated at 96.2% (593 of 616 strings)
Translated using Weblate (French)
Currently translated at 72.0% (31 of 43 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/fr/
Translated using Weblate (Chinese (Traditional))
Currently translated at 81.3% (35 of 43 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/zh_Hant/
Translated using Weblate (English (United Kingdom))
Currently translated at 6.6% (41 of 616 strings)
Translated using Weblate (Spanish)
Currently translated at 99.1% (611 of 616 strings)
Translated using Weblate (Greek)
Currently translated at 100.0% (616 of 616 strings)
Translated using Weblate (Arabic)
Currently translated at 97.8% (603 of 616 strings)
Translated using Weblate (Indonesian)
Currently translated at 100.0% (616 of 616 strings)
Translated using Weblate (Turkish)
Currently translated at 100.0% (616 of 616 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (616 of 616 strings)
Translated using Weblate (Finnish)
Currently translated at 99.5% (613 of 616 strings)
Translated using Weblate (Dutch (Belgium))
Currently translated at 100.0% (616 of 616 strings)
Translated using Weblate (Tamil)
Currently translated at 2.3% (1 of 43 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/ta/
Translated using Weblate (Italian)
Currently translated at 46.5% (20 of 43 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/it/
Translated using Weblate (Somali)
Currently translated at 100.0% (616 of 616 strings)
Translated using Weblate (Russian)
Currently translated at 100.0% (616 of 616 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 79.0% (34 of 43 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/zh_Hans/
Translated using Weblate (Somali)
Currently translated at 100.0% (616 of 616 strings)
Translated using Weblate (Korean)
Currently translated at 85.3% (526 of 616 strings)
Translated using Weblate (Dutch)
Currently translated at 100.0% (616 of 616 strings)
Translated using Weblate (Serbian)
Currently translated at 40.9% (252 of 616 strings)
Translated using Weblate (Italian)
Currently translated at 100.0% (616 of 616 strings)
Translated using Weblate (Portuguese)
Currently translated at 100.0% (616 of 616 strings)
Translated using Weblate (Romanian)
Currently translated at 74.3% (458 of 616 strings)
Translated using Weblate (Arabic)
Currently translated at 100.0% (616 of 616 strings)
Translated using Weblate (Catalan)
Currently translated at 100.0% (616 of 616 strings)
Translated using Weblate (Portuguese (Portugal))
Currently translated at 100.0% (616 of 616 strings)
Translated using Weblate (German)
Currently translated at 48.8% (21 of 43 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/de/
Translated using Weblate (Catalan)
Currently translated at 4.6% (2 of 43 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/ca/
Translated using Weblate (Arabic)
Currently translated at 67.4% (29 of 43 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/ar/
Translated using Weblate (Indonesian)
Currently translated at 13.9% (6 of 43 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/id/
Translated using Weblate (Chinese (Simplified))
Currently translated at 86.0% (37 of 43 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/zh_Hans/
Translated using Weblate (Somali)
Currently translated at 100.0% (616 of 616 strings)
Translated using Weblate (Somali)
Currently translated at 100.0% (616 of 616 strings)
Translated using Weblate (Slovak)
Currently translated at 100.0% (616 of 616 strings)
Translated using Weblate (Croatian)
Currently translated at 100.0% (616 of 616 strings)
Translated using Weblate (Finnish)
Currently translated at 99.6% (614 of 616 strings)
Translated using Weblate (Norwegian Bokmål)
Currently translated at 96.4% (594 of 616 strings)
Translated using Weblate (German)
Currently translated at 46.5% (20 of 43 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/de/
Translated using Weblate (Turkish)
Currently translated at 27.9% (12 of 43 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/tr/
Translated using Weblate (Norwegian Bokmål)
Currently translated at 18.6% (8 of 43 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/nb_NO/
Translated using Weblate (Santali)
Currently translated at 12.3% (76 of 616 strings)
Translated using Weblate (Somali)
Currently translated at 100.0% (616 of 616 strings)
Translated using Weblate (Kurdish (Central))
Currently translated at 95.9% (591 of 616 strings)
Translated using Weblate (Bengali)
Currently translated at 78.5% (484 of 616 strings)
Translated using Weblate (German)
Currently translated at 51.1% (22 of 43 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/de/
Translated using Weblate (German)
Currently translated at 51.1% (22 of 43 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/de/
Translated using Weblate (Greek)
Currently translated at 32.5% (14 of 43 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/el/
Translated using Weblate (Somali)
Currently translated at 100.0% (616 of 616 strings)
Translated using Weblate (Estonian)
Currently translated at 68.9% (425 of 616 strings)
Translated using Weblate (Kabyle)
Currently translated at 30.0% (185 of 616 strings)
Translated using Weblate (Estonian)
Currently translated at 4.6% (2 of 43 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/et/
Translated using Weblate (Somali)
Currently translated at 100.0% (616 of 616 strings)
Apply the requested changes, use ShareUtils.shareText to share an stream in the play queue and optimize imports for Java files, using Android Studio functionality.
Apply the requested changes and do little improvements
Apply the requested changes, use ShareUtils.shareText to share an stream in the play queue and optimize imports for Java files, using Android Studio functionality.
Improve NewPipe's share on some devices + fix crash when no browser is set on some devices
Catching ActivityNotFoundException when trying to open the default browser
Use an ACTION_CHOOSER intent and put as an extra intent the intent to
open an URI / share an URI when no default app is set.
Add a LinkHelper class which set a custom action when clicking web links
in the description of a content. This class also helps to implement a confirmation dialog when trying to open web links in an external app.
Changed the Somali language name from Af-Soomaali to Soomaali which is common and more user friendly when users are looking for Somali language in the list (since they aren't expecting it starts with A as in Af-Soomaali).
I contributed the language to the project on Weblate and I think this is name is better.
Problem is global state in static variable prettyTime. But for performance reasons on Android that is preferred.
Now allow injecting prettyTime dependency by making init function public.
When the play queue was null, and this method was called a null pointer
exception would be thrown. This change adds an additional check to see
if the play queue is not null before making additional changes.
Added translation using Weblate (Somali)
Translated using Weblate (Chinese (Traditional))
Currently translated at 99.8% (608 of 609 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (609 of 609 strings)
Translated using Weblate (Spanish)
Currently translated at 100.0% (609 of 609 strings)
Translated using Weblate (French)
Currently translated at 100.0% (609 of 609 strings)
Translated using Weblate (Serbian)
Currently translated at 41.0% (250 of 609 strings)
Translated using Weblate (English)
Currently translated at 100.0% (609 of 609 strings)
Translated using Weblate (Russian)
Currently translated at 100.0% (609 of 609 strings)
Translated using Weblate (Russian)
Currently translated at 100.0% (609 of 609 strings)
Translated using Weblate (Japanese)
Currently translated at 99.6% (607 of 609 strings)
Translated using Weblate (Italian)
Currently translated at 100.0% (609 of 609 strings)
Translated using Weblate (Italian)
Currently translated at 100.0% (609 of 609 strings)
Translated using Weblate (Portuguese)
Currently translated at 100.0% (609 of 609 strings)
Translated using Weblate (Basque)
Currently translated at 100.0% (609 of 609 strings)
Translated using Weblate (Czech)
Currently translated at 100.0% (609 of 609 strings)
Translated using Weblate (Arabic)
Currently translated at 99.8% (608 of 609 strings)
Translated using Weblate (Arabic)
Currently translated at 99.8% (608 of 609 strings)
Translated using Weblate (Turkish)
Currently translated at 100.0% (609 of 609 strings)
Translated using Weblate (Polish)
Currently translated at 100.0% (609 of 609 strings)
Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (609 of 609 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 99.8% (608 of 609 strings)
Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (609 of 609 strings)
Translated using Weblate (Croatian)
Currently translated at 100.0% (609 of 609 strings)
Translated using Weblate (Finnish)
Currently translated at 100.0% (609 of 609 strings)
Translated using Weblate (Belarusian)
Currently translated at 85.2% (519 of 609 strings)
Translated using Weblate (Bengali)
Currently translated at 79.1% (482 of 609 strings)
Translated using Weblate (German)
Currently translated at 29.2% (12 of 41 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/de/
Translated using Weblate (Basque)
Currently translated at 26.8% (11 of 41 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/eu/
Translated using Weblate (Chinese (Traditional))
Currently translated at 56.0% (23 of 41 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/zh_Hant/
Translated using Weblate (Santali)
Currently translated at 10.6% (65 of 609 strings)
Translated using Weblate (Somali)
Currently translated at 15.9% (97 of 609 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (609 of 609 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 99.5% (610 of 613 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (613 of 613 strings)
Translated using Weblate (German)
Currently translated at 100.0% (613 of 613 strings)
Translated using Weblate (Russian)
Currently translated at 100.0% (613 of 613 strings)
Translated using Weblate (Italian)
Currently translated at 100.0% (613 of 613 strings)
Translated using Weblate (Portuguese)
Currently translated at 100.0% (613 of 613 strings)
Translated using Weblate (Basque)
Currently translated at 100.0% (613 of 613 strings)
Translated using Weblate (Greek)
Currently translated at 100.0% (613 of 613 strings)
Translated using Weblate (Greek)
Currently translated at 100.0% (613 of 613 strings)
Translated using Weblate (Slovak)
Currently translated at 100.0% (613 of 613 strings)
Translated using Weblate (Arabic)
Currently translated at 97.0% (595 of 613 strings)
Translated using Weblate (Indonesian)
Currently translated at 99.6% (611 of 613 strings)
Translated using Weblate (Turkish)
Currently translated at 100.0% (613 of 613 strings)
Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (613 of 613 strings)
Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (613 of 613 strings)
Translated using Weblate (Hebrew)
Currently translated at 100.0% (613 of 613 strings)
Translated using Weblate (Croatian)
Currently translated at 100.0% (613 of 613 strings)
Translated using Weblate (Finnish)
Currently translated at 99.6% (611 of 613 strings)
Translated using Weblate (Norwegian Bokmål)
Currently translated at 93.4% (573 of 613 strings)
Translated using Weblate (Sardinian)
Currently translated at 99.5% (610 of 613 strings)
Translated using Weblate (German)
Currently translated at 41.4% (17 of 41 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/de/
Translated using Weblate (Turkish)
Currently translated at 19.5% (8 of 41 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/tr/
Translated using Weblate (Greek)
Currently translated at 34.1% (14 of 41 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/el/
Translated using Weblate (Portuguese)
Currently translated at 63.4% (26 of 41 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/pt/
Translated using Weblate (Italian)
Currently translated at 43.9% (18 of 41 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/it/
Translated using Weblate (Chinese (Traditional))
Currently translated at 80.4% (33 of 41 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/zh_Hant/
Translated using Weblate (Chinese (Simplified))
Currently translated at 70.7% (29 of 41 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/zh_Hans/
Translated using Weblate (Somali)
Currently translated at 81.4% (499 of 613 strings)
Translated using Weblate (Somali)
Currently translated at 4.8% (2 of 41 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/so/
Translated using Weblate (Bulgarian)
Currently translated at 62.1% (381 of 613 strings)
Translated using Weblate (Bulgarian)
Currently translated at 62.1% (381 of 613 strings)
it fixes issues with forks or debug builds, e.g. when you open two newpipe apps (with debug or fork apps), close one notification, it closes all newpipe notifications
fixes https://github.com/TeamNewPipe/NewPipe/issues/4653
The enqueue options won't be shown in the dialogs if the Player service is not running. When it's running one item (enqueue stream) will be shown and enqueues the item into the Player type which is currently selected.
- each time something starts to play in any player VideoDetailFragment will be started (if not yet started) and mini player will show up. It makes possible to see a playing stream in mini player even if the stream was started without using fragment or after player service was closed somehow
- play/next/queue buttons will be updated in realtime when stream was added/removed from queue instead of waiting for a onPlay/onPause action to happen
- when popup or background players start the stream will start playing only if paused state wasn't requested. Which means, for example, if a user opens popup it will be started when START_PAUSED is false. If, for example, the stream was played in main player and then popup was started the stream will still be playing, but if it was paused it still be paused in popup (or background) in APPEND_ONLY mode (but will be playing on new queue initialization)
- the app will not rotate the screen to portrait after video completes, it will just exit from fullscreen mode
- ability to rotate the orientation via fullscreen button from landscape to portrait when device has locked orientation in landscape
- ability to enter/exit to/from fullscreen on tablets with unlocked global orientation in portrait mode
With the new application workflow and unified player, video detail page and video player are the same activity. So show only one of these options based on whether autoplay is enabled or not, and show both if using external player
- remove duplicated string (name) and avoid potential duplicate (autoplay_never_description -> Never, autoplay_always_description -> Always because they are just "Always" or "Never"). Fixes#4268
- leakCanary string removed (fixes#4233)
- ACTION_BUFFERING was just wrong: why should the user be able to trigger the internal onBuffering() state by pressing on the buffering button? So that was replaced by a null intent, doing nothing.
- Now updating notification in onBuffering() only when buffering actions are not already buffering, to prevent useless updates
Do not show anything in case of network error (it can simply be ignored).
Show a snackbar otherwise, which still allows writing things into the search box.
Have the notification recreate only when strictly necessary, and recreate it if there was a timeline change, fixing the seekbar not updating at all sometimes
Improve builder parameters
Reorder code and extract large icon function
service.startForeground() now is also provided with service type in android versions >= Q
This was discussed in IRC, and should help prevent the occurrence of problems where people spend hours on a feature only for it to be rejected for miscellaneous reasons.
- add MediaStyle notifications for Background and Popup playback
- reduce excessive notification updating ( / recreating of Notification.Builder object) when playing background / popup media
- add new buffering state indicator (can be disabled)
- upscale close icon / downscale replay icon
- add notification slot settings
- move notification settings to appearance
- fix Metadata (song title, artist and album art) sometimes not being set correctly
- other misc notification fixes
Co-authored-by: wb9688 <wb9688@users.noreply.github.com>
- focus will be hidden right after start of a video; fullscreen works like this too
- back button will not needed to be pressed one more time like before
- prev & next buttons for playqueue will be hidden with play/pause button before video be ready to play
- on Android TV you'll be able to navigate with D-pad in main fragment and in the player. But not between them for now
- play/pause/next/previous buttons are smaller now
- replaced ic_list with previous version of it
- activity_main looks better which helps with Android TV support
* All muxers (mp4, webm and ogg) are affected
* solve some checkstyle's errors (building was blocked)
Mp4FromDashWriter:
* drop "writing application"
* drop "handler name"
OggFromWebMWriter:
* drop "writing application" for OPUS and VORBIS header
WebMWriter:
* Drop "Muxing application"
* Drop "Writing application"
The adapter could not tell the items were the same because the
subscription class was missing some methods (i.e. equals and hashcode),
so a full rebind was being done.
Also remove legacy libraries
Use `androidx.preference:preference` instead of `androidx.legacy:legacy-preference-v14` and remove `androidx.legacy:legacy-support-v4
For all manually-created images PNG have been kept.
- rename all icon attrs to have a `ic_` prefix
- always use `_24dp` icons, because there is no real difference, since they are vector drawables
- always use the original name found on material.io for icon drawables, as to not create confusion and possibly duplicates. Icon names can still be different from real drawable names, though I have made some of them compliant to this or maybe more meaningul.
- remove duplicate `getIconByAttr()` in ThemeHelper (use `resolveResourceIdFromAttr()`
- use standard icons for `expand_more` and `expand_less` instead of triangles
- use `play_button_outline` instead of custom PNG as play button in VideoDetailFragment (questionable, as there is no shadow anymore)
The one used for tests, popular instances and user wanted (e.g. la quadrature du net, video.lqdn.fr, or @TheAssassin instance, media-assassinate-you.net)
Make all of the uploader section on stream page navigate to the channel page
Extract hard coded strings
Remove redundant spaces
Fix open streams from a channel
Rename "ParentChannel" to "SubChannel"
Config royosef:NewPipeExtractor in app/build.gradle
Now the age restricted content cookie is only sent when sending a
request to youtube. There's no need to remove the cookie when the
service changes because whether to add the cookie is determined by
looking at the url the request is being sent to.
Cookie updated whenever ageRestrictedContent setting is changed or
service is changed. Right now there is only a cookie for youtube, but
cookies for other services could be added in the future.
Problems with this approach: Even when the service is set to youtube,
the downloader doesn't only request youtube urls e.g. it also sends
reqeusts to i.ytimg.com, suggestqueries.google.com, and yt3.ggpht.com.
The ageRestrictedContent cookie is not normally sent when sending
requests to these other urls, so doing so might have unknown effects.
Try to get cookies from pages even when they start loading, because non-html pages like ones with `pbj=1` never stop loading.
Try to extract the cookie directly from the redirection url, by looking at the field "google_abuse=".
Add `GOOGLE_ABUSE_EXEMPTION=` to the youtube recaptcha cookies.
Playback parameters are speed, pitch and skip silence.
Remove parameters being passed on as intent to the player, since the parameters can be restored from the preferences instead.
# Conflicts:
# app/src/main/java/org/schabi/newpipe/player/BasePlayer.java
The upload date was being updated regardless if the new one had more
precision or not, this caused items on the feed to jump around when the
user opened one of them.
This changes it to only update when the existent upload date is null or
the new one has a higher precision (i.e. is not an approximation).
Changes:
- local_playlist_control.xml
* A copy of playlist_control.xml
* To hold the 'Remove Watched Videos' buttton
- local_playlist_header.xml
* Changed the include layout to now include local_playlist_control.xml
- strings.xml
* added string 'remove_watched' with value 'Remove Watched'
- LocalPlaylistFragment.java
* Added the functionality to remove watched videos,
to the 'Remove Watched Videos' button in local_playlist_control.xml.
In the background via AsyncTask.
This will also change the playlist's thumbnail, if the thumbnail video is removed.
Tested on:
- Pixel
When restoring the state of the adapter, all the fragments' menu
visibility were set to false, effectively disabling the menu from the
user until he switched pages or another event that triggered the menu to
be visible again happened.
FragmentStatePagerAdapter is deprecated and should be replaced with its
ViewPager2 counterpart, until then, this should do it.
- Use a proper drop up/down arrow icon.
- Move selected service views for better visibility.
- Show the selected service icon next to its name.
- Add a subtle fade background to the service name/icon for better
readability.
When contents of NewPipe navigation drawer change, NavigationMenuView
(which is actually a RecyclerView) removes and re-adds all its adapter
children, which leads to temporary loss of focus on currently focused drawer
child. This situation was not anticipated by developers of original
support library DrawerLayout: while NavigationMenuView itself is able
to keep focus from escaping via onRequestFocusInDescendants(),
the implementation of that method in DrawerLayout does not pass focus
to previously focused View. In fact it does not pass focus correctly at all
because the AOSP implementation of that method does not call addFocusables()
and simply focuses the first available VISIBLE View, without regard
to state of drawers.
Keyboard focus clusters prevent that from working, so
we simply remove all focus clusters.
While they are generally a good idea, focus clusters were created
with Chrome OS and it's keyboard-driven interface in mind - there is no
documented way to move focus between clusters using only IR remote.
As such, there are no negative consequences to disabling them on Android TV.
YouTube, for example, has a dedicated feed which was built to be used
like this. It comes with some caveats though, like lacking enough
information about the items and returning a limited amount of them.
Nonetheless, a nice option for users that like speedy updates but don't
mind this issue.
Now only the subscriptions from the selected group by the user will be
loaded.
Also add an option to decide how much time have to pass since the last
refresh before the subscription is deemed as not up to date. This helps
when a subscription appear in multiple groups, since updating in one
will not require to be fetched again in the others.
- Introduce Groupie for easier lists implementations
- Use some of the new components of the Android Architecture libraries
- Add a bunch of icons for groups, using vectors, which still is
compatible with older APIs through the compatibility layer
This really shouldn't be enabled, as this database is not just a temp
one. Making the mistake of shipping the app without a proper migration
would cause a big problem.
Really hard to happen but an error is far better than data loss.
* read "SeekPreRoll" from the source track (if available)
* use the longest track duration as segment duration, instead of the video track duration
* do not hardcode the "Cue" reserved space behavior
* do not hardcode the "EBML Void" element, unreported issue. The size was not properly calculated
* rewrite the key-frame picking
* remove writeInt(), writeFloat() and writeShort() methods, use inline code
* set "SeekPreRoll" and "CodecDelays" values on output tracks (if available)
* rewrite the "Cluster" maker
* rewrite the code of how "Cluster" sizes are written
Fix encode() method (the reason of this commit/pull-request):
* Use the unsigned shift operator instead of dividing the value, due precession lost
Tabs were not being destroyed/restored correctly due to a call to a
method that populated the view pager before it even had a chance of
restoring itself.
The solution was to null out the adapter before calling that method so
the view pager will postpone the populating process.
- Add function `getGitWorkingBranch` that returns the current working branch, and "" if it could not be determined (either because git is not installed or because the directory is not a git repo).
- Make sure normalizedWorkingBranch is not empty (leading to an invalid app id terminating with `.`)
- Make normalizedWorkingBranch lowercase
- Add comments
- vertical videos now work ok in portrait and fullscreen mode at the same time
- auto pause on back press is disabled for large tablets
- large dragable area for swipe to bottom in fullscreen mode in place of top controls
- appbar will be scrolled to top when entering in fullscreen mode
With the extractor PR, fixes title & description shown in the wrong language.
Fixed views / spectators counts possibly in the wrong language
Fixed live spectators not showing full count on detail page
Fixed LIVE shown on players, it shows translated instead
Fixed Videos string in search / three dots not available in Weblate
(because it was videos, but there already was a plural string named videos, in Weblate)
Subscriber count is always giving the short count.
We can't get exact number since this YouTube update: https://support.google.com/youtube/thread/6543166
But only short count (B, M, k), so showing full number, eg for 1.9M: 1,900,000, is wrong because the number could be 1,923,490 or 1,897,789…
Added a « sytem default » option to content language and country language selector.
It's the one selected by default (not en-GB anymore then), and correspond to the
language of the system / country of the system
By system I mean phone, tablet, TV…
Fixed russian showing - before time ago (eg 19hrs ago)
This is a workaround fix, I opened an issue on prettytime library repo.
Fixed russian plurals:
other was used instead of many for videos and subscribers
Fixed seek_duration english only
- made scrolling in appBarLayout awesome
- PlayQueue layout was intercepting touches while it was in GONE visibility state. Now it's not gonna happen
- removed margin between two lines of player's controls
- when a user leaves the app with two back presses the app will not stop MainPlayer service if popup or background players play
description:
- PeerTube: it's now full description (it cut at 250 characters before), and it displays ok (newlines are ok, but markdown isn't)
- MediaCCC: descriptions are now displayed well (newlines added)
- YouTube: timestamps in descriptions are clickable and work
more PeerTube fixes:
thumbnail is now high quality
age limit is now handled
upload date in «recently added» feed is good now (it was one hour delayed)
all fixes come from https://github.com/TeamNewPipe/NewPipeExtractor/pull/239, so it need to be merged before this PR
- mini player's title, image and author information will be updated in many situations but the main idea is that the info will be the same as currently playing stream. If nothing played then you'll see the info about currently opened stream in fragment. When MainPlayer service stops the info updates too
- made ExpandableSurfaceView to replace AspectRatioFrameLayout. The reason for that is to make possible to use aspect ratio mode ZOOM. It's impossible to show a stream inside AspectRatioFrameLayout with ZOOM mode and to fit the video view to a screen space at the same time. Now the new view able to do that and to show vertical videos in a slightly wide space for them
- refactored some methods to make the code more understandable
- made fixes for player view for landscape-to-landscape orientation change
- added Java docs
- adapted swipe tracking inside bottom sheet
- fixed PlayQueue crashes on clearing
- paddings for popup player now as small as possible
Changed android.R.string.ok, which is "OK", into R.string.finish, which is also OK, but from our strings
Then for a small amount of languages that don't have Android translation, it will show the good string.
renamed NewPipe's language into App language, and same for all the
concerning thing (keys, comments…)
we now call assureCorrectAppLanguage(CONTEXT) in activities needing it
instead of changeAppLanguage(getAppLocale(CONTEXT), RESOURCES)
changeAppLanguage becomes private.
After long clicking on a local playlist, show a dialog with 2 options for "rename" and "delete"
Rename shows another dialog to let the user rename the playlist.
Delete lets the user delete a playlist like before.
This is a hardly reproduceable bug that I hopefully fixed. After a long time of watching videos, you could have your system language shown in playback parameters dialog.
Calling changeAppLanguage(getAppLocale(…),…) onCreate will most certainly fix this bug
- status bar got a fix for situation when a phone vendor did not provide status bar height for landscape orientation
- popup will not be init'd twice
- also fixed some non-reproduceable bugs
- added autoplay options inside settings: always, only on wifi, never
- now statusbar will be shown in fullscreen mode
- playlists, channels can be autoplayed too (if enabled)
- changed title of background activity to Play queue
- fixed a crash
* [DownloadDialog.java] use *.opus extension instead of *.webm (bad change from 844f80a5f1)
* [StreamItemAdapter.java] show "opus" in format label instead of "WebM Opus"
- wrote more methods to PlayQueue. Now it supports internal history of played items with ability to play previous() item. Also it has equals() to check whether queues has the same content or not
- backstack in fragment is more powerful now with help of PlayQueue's history and able to work great with playlists' PlayQueue and SinglePlayQueue at the same time
- simplified logic inside fragment. Easy to understand. New PlayQueue will be added in backstack from only one place; less number of setInitialData() calls
- BasePlayer now able to check PlayQueue and compare it with currently playing. And if it is the same queue it tries to not init() it twice. It gives possibility to have a great backstack in fragment since the same queue will not be played from two different instances and will not be added to backstack twice with duplicated history inside
- better support of Player.STATE_IDLE
- worked with layouts of player and made them better and more universal
- service will be stopped when activity finishes by a user decision
- fixed a problem related to ChannelPlayQueue and PlaylistPlayQueue in initial start of fragment
- fixed crash in popup
- audio-only streams plays the same way as video streams
- fullscreen mode for tablet with controls on the right place
- hidden controls while swiping mini player down
- mini player works better
- hide/show controls with respect of SystemUI. In fullscreen mode controls will stay away from NavigationBar
- notification from running service will be hidden if a user disabled background playback
- fixed incorrect handling of a system method in API 19
- better MultiWindow support
- popup player click event changed to show/hide buttons
- queue panel WORKS. Finally
- removed theme overriding in fragment
- added scroll to top after stream selection
- adjusted padding/margin of buttons in player
- player will itself in fullscreen after user hides it in fullscreen mode and then expands it again while video still playing
- popup after orientation change had incorrect allowed bounds for swiping
- popup could cause a crash after many quick switches to main player and back
- better method of setting fullscreen/non-fullscreen layout using thumbnail view. Also fixed thumbnail height in fullscreen layout
- global settings observer didn't work when a user closed a service manually via notification because it checked for service existing
- app will now exits from fullscreen mode when the user switches players
- playQueuePanel has visibility "gone" by default (not "invisible") because "invisible" can cause problems
- main, background, popup players now connected via one service, one view, one fragment, one activity and one gesture listener
- playback position is synchronized between players. Easy to switch from one to another
- expandable player at the bottom of the screen with cool animation and additional features like long click to open channel of a video, play/pause/close buttons and swipe down to dismiss
- in-player integrated buttons for opening in browser, playing with Kodi, sharing a video
- better background playback that can be activated in settings. Allows to automatically switch to audio-only mode when going to background and then switching to video-mode when returning to the app.
This enables modern TLS versions in the collection browser, the Downloader and the Player.
This is neccessary because media.ccc.de rejects all older TLS connection attempts, see issue #2777.
Video descriptions can be very long. Some of them are
basically walls of text with couple of lines at top or bottom.
They are also not scrolled within TextView itself, - instead
NewPipe expects user to scroll their containing ViewGroup.
This renders all builtin MovementMethod implementations useless.
This commit adds a new MovementMethod, that uses requestRectangleOnScreen
to intelligently re-position the TextView within it's scrollable container.
* Move all focus-related work arouns to NewPipeRecyclerView
* Try to pass focus within closer parents first
* Do small arrow scroll if there are not more focusables in move direction
FocusFinder has glitches when some of target Views have different size.
Fortunately LayoutManager can redefine focus search strategy to override
the default behavior.
* Hide player controls when back is pressed (only on TV devices)
* Do not hide control after click unless in touch mode
* Show player controls on dpad usage
* Notably increase control hide timeout when not in touch mode
GridLayoutManager is buggy - https://issuetracker.google.com/issues/37067220:
it randomly loses or incorrectly assigns focus when being scrolled via
direction-based navigation. This commit reimplements onFocusSearchFailed()
on top of scrollBy() to work around that problem.
Ordinary touch-based navigation should not be affected.
* migrate few annotations to androidx
* mission recovery: better error handling (except StreamExtractor.getErrorMessage() method always returns an error)
* post-processing: more detailed progress
[file specific changes]
DownloadMission.java
* remove redundant/boilerplate code (again)
* make few variables volatile
* better file "length" approximation
* use "done" variable to count the amount of bytes downloaded (simplify percent calc in UI code)
Postprocessing.java
* if case of error use "ERROR_POSTPROCESSING" instead of "ERROR_UNKNOWN_EXCEPTION"
* simplify source stream init
DownloadManager.java
* move all "service message sending" code to DownloadMission
* remove not implemented method "notifyUserPendingDownloads()" also his unused strings
DownloadManagerService.java
* use START_STICKY instead of START_NOT_STICKY
* simplify addMissionEventListener()/removeMissionEventListener() methods (always are called from the main thread)
Deleter.java
* better method definition
MissionAdapter.java
* better method definition
* code cleanup
* the UI is now refreshed every 750ms
* simplify download progress calculation
* indicates if the download is actually recovering
* smooth download speed measure
* show estimated remain time
MainFragment.java:
* check if viewPager is null (issued by "Apply changes" feature of Android Studio)
* OggFromWebMWriter: rewrite (again), reduce iterations over the input. Works as-is (video streams are not supported)
* WebMReader: use int for SimpleBlock.dataSize instead of long
* Download Recovery: allow recovering uninitialized downloads
* check range-requests using HEAD method instead of GET
* DownloadRunnableFallback: add workaround for 32kB/s issue, unknown issue origin, wont fix
* reporting downloads errors now include the source url with the selected quality and format
* correct calculation of "co64" box and usage of 64bits offsets
* generate one chunk for audio streams like ffmpeg does, attempt to fix cut-off audio
* misc. cleanup
* reduce the number of iterations over the output file (less seeking)
* fix audio samples with size of 255 do not handled correctly in the segment table (allows writing audio streams with 70kbps and 160kbps bitrate)
* add support for VORBIS codec metadata
* write packets based on the timestamp
* migrate few annotations to androidx
* mission recovery: better error handling (except StreamExtractor.getErrorMessage() method always returns an error)
* post-processing: more detailed progress
[file specific changes]
DownloadMission.java
* remove redundant/boilerplate code (again)
* make few variables volatile
* better file "length" approximation
* use "done" variable to count the amount of bytes downloaded (simplify percent calc in UI code)
Postprocessing.java
* if case of error use "ERROR_POSTPROCESSING" instead of "ERROR_UNKNOWN_EXCEPTION"
* simplify source stream init
DownloadManager.java
* move all "service message sending" code to DownloadMission
* remove not implemented method "notifyUserPendingDownloads()" also his unused strings
DownloadManagerService.java
* use START_STICKY instead of START_NOT_STICKY
* simplify addMissionEventListener()/removeMissionEventListener() methods (always are called from the main thread)
Deleter.java
* better method definition
MissionAdapter.java
* better method definition
* code cleanup
* the UI is now refreshed every 750ms
* simplify download progress calculation
* indicates if the download is actually recovering
* smooth download speed measure
* show estimated remain time
MainFragment.java:
* check if viewPager is null (issued by "Apply changes" feature of Android Studio)
* OggFromWebMWriter: rewrite (again), reduce iterations over the input. Works as-is (video streams are not supported)
* WebMReader: use int for SimpleBlock.dataSize instead of long
* Download Recovery: allow recovering uninitialized downloads
* check range-requests using HEAD method instead of GET
* DownloadRunnableFallback: add workaround for 32kB/s issue, unknown issue origin, wont fix
* reporting downloads errors now include the source url with the selected quality and format
* correct calculation of "co64" box and usage of 64bits offsets
* generate one chunk for audio streams like ffmpeg does, attempt to fix cut-off audio
* misc. cleanup
* reduce the number of iterations over the output file (less seeking)
* fix audio samples with size of 255 do not handled correctly in the segment table (allows writing audio streams with 70kbps and 160kbps bitrate)
* add support for VORBIS codec metadata
* write packets based on the timestamp
- Fragments were being recreated from scratch (losing their state) every
time some configuration change occurred (e.g. screen rotation).
- Use `FragmentStatePagerAdapter` instead, as it is built to work with
them and manage their states.
Before, the direct value was given to the user, now it uses the parsed
date so we can match the device's language.
To get the relative time from the parsed dates, we use the PrettyTime
library.
Also introduces a debug option to check the service's original value.
Hebrew on android uses two locale codes (iw and he).
See details here: https://stackoverflow.com/a/8470980
For example, Nexus 7 (2013) uses iw, so it shows the English UI even when configuring the tablet to use Hebrew.
Add a symbolic link from values-iw to values-he so both use the same strings.
* validate the stored file before start the mission
* add warning on StoredFileHelper.java
* simplify the communication between MissionAdapter and DownloadManagerService.java since shares the same looper
* simplify setVisible() "start/pause all downloads" buttons logic
- NewPipe uses nanojson and jsoup, despite not declaring them.
- NewPipe depends on NewPipeExtractor, which depends on nanojson and jsoup.
- Gradle lets NewPipe use nanojson and jsoup, but this breaks when I use:
includeBuild('../NewPipeExtractor') {
dependencySubstitution {
substitute module('com.github.TeamNewPipe:NewPipeExtractor') with project(':extractor')
}
}
Sometimes YouTube introduces recaptchas only on some pages. By loading the url inside the ReCaptchaException into ReCaptchaActivity's webview, the page that originally caused the problem is shown. The user can then solve the page-specific recaptcha.
* restore permission request popup previously removed in #2486
* use legacy file picker in cases where saf file picker is not available
* fix missing file check logic in prepareSelectedDownload method (DownloadDialog.java)
Now the playback state of a stream is loaded only when needed (i.e. when the stream is visible), just as it is done with thumbnails.
Removed `StateObjectsListAdapter.java`, which used to load the state of every stream at list instantiation, generating slowdowns and freezes.
* fix socket leak in "DownloadRunnable"
* in "DownloadInitializer" close the HTTP body after doing range-request checks
* in "DownloadRunnableFallback" fix typo in comment
* in "DownloadDialog" fix regression, using one thread for audios instead of subtitles
Common actions and labels are now in a unique enum: StreamDialogEntry
If an action is not common to every long-press menu (e.g. delete) a custom action has to be provided using e.g. delete.setAction(...)
* re-write download segmenting logic (issue #).
* clean-up download threads handling.
* fix race-condition if "pause" option in download context menu was selected, in the transition from "pending" to "finished" state.
closes#2393
this ammends my obviously incomplete fix in PR #2311.
This is just an UI issue. Subtitle track selection works, it just shows "No Captions" unfortunately.
* improve space reserving, allows write better 4K/8K video data
* do not use cache dirs in the muxers, Android can force close NewPipe if the device is running out of storage. Is a aggressive cache cleaning >:/
* (for devs) webm & mkv are the same thing
* calculate the final file size inside of the mission, instead getting from the UI
* simplify ps algorithms constructors
* [missing old commit message] simplify the loading of pending downloads
* use Java I/O (classic way) on older android versions
* use Storage Access Framework on newer android versions (Android Lollipop or later)
* both changes have the external SD Card write permission
* add option to ask the save path on each download
* warn the user if the save paths are not defined, this only happens on the first NewPipe run (Android Lollipop or later)
* implement socket timeout error
* use 128k buffer size for copy
* use NewPipe HTTP user agent in the downloads
* automatically recover downloads with network errors that are queued
* replace "In queue" to "Pending" in the downloads header to avoid confusions (all languages)
* use 29bits Clusters size to support huge video resolutions (fixes#2291) (WebmWriter.java)
* add missing changes to WebmMuxer.java (i forget select the audio track)
* full support for Directory API (Android Lollipop or later)
* best effort to handle any kind errors (missing file, revoked permissions, etc) and recover the download
* implemented directory choosing
* fix download database version upgrading
* misc. cleanup
* do not release permission on the old save path (if the user change the download directory) under SAF api
* re-work finished mission database
* re-work DownloadMission and bump it Serializable version
* keep the classic Java IO API
* SAF Tree API support on Android Lollipop or higher
* add wrapper for SAF stream opening
* implement Closeable in SharpStream to replace the dispose() method
* do required changes for this API:
** remove any file creation logic from DownloadInitializer
** make PostProcessing Serializable and reduce the number of iterations
** update all strings.xml files
** storage helpers: StoredDirectoryHelper & StoredFileHelper
** best effort to handle any kind of SAF errors/exceptions
Main changes:
* correctly check the available space (CircularFile.java)
* misc cleanup (CircularFile.java)
* use the "Error Reporter" for non-http errors
* rewrite network state checking and add better support for API 21 (Lollipop) or higher
* implement "metered networks"
* add buttons in "Downloads" activity to start/pause all pending downloads, ignoring the queue flag or if the network is "metered"
* add workaround for VPN connections and/or network switching. Example: switching WiFi to 3G
* rewrite DataReader ¡Webm muxer is now 57% more faster!
* rewrite CircularFile, use file buffers instead of memory buffers. Less troubles in low-end devices
* fix missing offset for KaxCluster (WebMWriter.java), manifested as no thumbnails on file explorers
Download queue:
* remember queue status, unless the user pause the download (un-queue)
* semi-automatic downloads, between networks. Effective if the user create a new download or the downloads activity is starts
* allow enqueue failed downloads
* new option, queue limit, enabled by default. Used to allow one or multiple downloads at same time
Miscellaneous:
* fix crash while selecting details/error menu (mistake on MissionFragment.java)
* misc serialize changes (DownloadMission.java)
* minor UI tweaks
* allow overwrite paused downloads
* fix wrong icons for grid/list button in downloads
* add share option
* implement #2006
* correct misspelled word in strings.xml (es) (cmn)
* fix MissionAdapter crash during device shutdown
New Mp4Muxer + required changes:
* new mp4 muxer (from dash only) with this, muxing on Android 7 is possible now!!!
* re-work in SharpStream
* drop mp4 dash muxer
* misc changes: add warning in SecondaryStreamHelper.java,
* strip m4a DASH files to normal m4a format (youtube only)
Fix storage issues:
* warn to the user if is choosing a "read only" download directory (for external SD Cards), useless is rooted :)
* "write proof" allow post-processing resuming only if the device ran out of space
* implement "insufficient storage" error for downloads
start_here_on_background has the same meaning
start_here_on_main is now unused, but I left it there so that if it ever becomes useful again, it is ready to be used.
Remove strings which have been deleted from the English strings file during development, but were translated via Weblate, which failed to pull and push our upstream repo.
This pull requests complements pull request #2178 by reducing general computational time for the method getTimeString.
On my local machine (Desktop PC with Java) my tests with a sample size of 10000 calls to the method with param 86400001 showed a performance improvement of about 50%.
See sample code below to reproduce:
private static final StringBuilder stringBuilder = new StringBuilder();
private static final Formatter stringFormatter = new Formatter(stringBuilder, Locale.getDefault());
public static String getTimeString(int milliSeconds) {
int seconds = (milliSeconds % 60000) / 1000;
int minutes = (milliSeconds % 3600000) / 60000;
int hours = (milliSeconds % 86400000) / 3600000;
int days = (milliSeconds % (86400000 * 7)) / 86400000;
stringBuilder.setLength(0);
return days > 0 ? stringFormatter.format("%d:%02d:%02d:%02d", days, hours, minutes, seconds).toString()
: hours > 0 ? stringFormatter.format("%d:%02d:%02d", hours, minutes, seconds).toString()
: stringFormatter.format("%02d:%02d", minutes, seconds).toString();
}
public static String getTimeStringL(int milliSeconds) {
long seconds = (milliSeconds % 60000L) / 1000L;
long minutes = (milliSeconds % 3600000L) / 60000L;
long hours = (milliSeconds % 86400000L) / 3600000L;
long days = (milliSeconds % (86400000L * 7L)) / 86400000L;
stringBuilder.setLength(0);
return days > 0 ? stringFormatter.format("%d:%02d:%02d:%02d", days, hours, minutes, seconds).toString()
: hours > 0 ? stringFormatter.format("%d:%02d:%02d", hours, minutes, seconds).toString()
: stringFormatter.format("%02d:%02d", minutes, seconds).toString();
}
public static void main(String[] args) throws Exception {
final int SAMPLE_SIZE = 25000;
long[] results = new long[SAMPLE_SIZE];
for(int i = 0; i < SAMPLE_SIZE; i++) {
long now = System.nanoTime();
getTimeString(86400001);
results[i] = System.nanoTime() - now;
}
long sum = 0;
for(int i = 0; i < SAMPLE_SIZE; i++) {
sum += results[i];
}
System.out.println("Average execution time: " + (sum/SAMPLE_SIZE));
results = new long[SAMPLE_SIZE];
for(int i = 0; i < SAMPLE_SIZE; i++) {
long now = System.nanoTime();
getTimeStringL(86400001);
results[i] = System.nanoTime() - now;
}
sum = 0;
for(int i = 0; i < SAMPLE_SIZE; i++) {
sum += results[i];
}
System.out.println("Average execution time: " + (sum/SAMPLE_SIZE));
In VideoPlayer the Duration String is cached effectively by setting it to the playbackSeekBar. As the playbackSeekBar doesn't exist in BackgroundPlayer, using two addition variables will reduce performance impact of notification updates by almost 50% and thus perform similar to VideoPlayer.
This addresses issue #2170
Scenario: listening to a video on NewPipe over Bluetooth and a Notification Sound causes audio focus event AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK.
Problem: With the current implementation animateAudio would cause the audio to reach the target volume AFTER the notification sound is played, which is irritating and annoying.
Solution: animateAudio should just be used on focusGain where it is sensible to increase audio gradually. On ducking event the reaction should be immediate.
This very simple fix does this. Please approve.
This is a follow up to TeamNewPipe#2069. I've removed the "WARNING" from the second one as it looks a bit silly to have the same thing twice, when the user is already attracted to the first one, which means they will most probably read the second warning.
I can revert this if you don't like it.
* allow retry downloads with "post-processing failed" error in the new muxer
* MPEG-4 muxer ¡¡ no DASH output!!
* keep the progress if download fails
* remove TODO in SecondaryStreamHelper.java
* misc clean-up
* delete TestAlgo.java
* delete ExtSDDownloadFailedActivity.java and remove it from AndroidManifest.xml
* use hardcored version for changing icon colors
* add null checks before resuming a download
* (MissionAdapter.java) reset percent after resuming a download. prevents the "Error" string get stuck, until the download start
This will help cull the number of "how to update?" Issues whenever we need to push out a fix, like how recently NewPipe got completely broken.
This attempts to be an all-inclusive guide to updating NewPipe. If there are any (clean/official) links to additional info, please comment them and I will add it.
Also let me know if this section should be relocated within the README. I figured it would be best to keep it up top, so people see it right away, and then don't make a new Issue.
* fast download pausing
* fix UI thread blocking when calling pause()
* check running threads before start the download
* fix null pointer exception in onDestroy in the download service, without calling onCreate method (android 8)
* misc code clean-up
* fix weird download speed, before switching the list view
* fix CircularFile.java getting stuck on post-processing huge files >2GiB
* keep crashed post-processing downloads visible to the user
* fix content length reading
* use float overflow. Expensive, double is used instead
* fix invalid cast after click the mission body
* use a list for maximum attemps (downloads)
* minor clean up (DownloadManager.java)
* dont pass SharedPreferences instace to DownloadManager
* use a switch instead of checkbox for cross_network_downloads
* notify media scanner after deleting a finished download
* use bold style in status (mission_item_linear.xml)
* fix download attemps not begin updated
* dont stop the queue if a download fails
* implement partial wake-lock & wifi-lock
* show notifications for failed downloads
* ¿proper bitmap dispose? (DownloadManagerService.java)
* improve buffer filling (CircularFile.java)
* [Mp4Dash] increment reserved space from 2MiB to 15MiB. This is expensive but useful for devices with low ram
* [WebM] use 2MiB of reserved space
* fix debug warning if one thread is used
* fix wrong download speed when the activity is suspended
* Fix "Queue" menu item that appears in post-processing errors
* fix mission length dont being updated (missing commit)
Also this include:
* Mp4 DASH reader/writter
* WebM reader/writter
* a subtitle converter for Timed Text Markup Language v1 and TranScript (v1, v2 and v3)
* SharpStream to wrap IntputStream and OutputStream in one interface
* custom implementation of DataInputStream
Post-processing infrastructure
* remove interfaces with one implementation
* fix download resources with unknow length
* marquee style for ProgressDrawable
* "view details" option in mission context menu
* notification for finished downloads
* postprocessing infrastructure: sub-missions, circular file, layers for layers of abstractions for Java IO streams
* Mp4 muxing (only DASH brand)
* WebM muxing
* Captions downloading
* alert dialog for overwrite existing downloads finished or not.
Misc changes
* delete SQLiteDownloadDataSource.java
* delete DownloadMissionSQLiteHelper.java
* implement Localization from #114
Misc fixes (this branch)
* restore old mission listeners variables. Prevents registered listeners get de-referenced on low-end devices
* DownloadManagerService.checkForRunningMission() now return false if the mission has a error.
* use Intent.FLAG_ACTIVITY_NEW_TASK when launching an activity from gigaget threads (apparently it is required in old versions of android)
More changes
* proper error handling "infrastructure"
* queue instead of multiple downloads
* move serialized pending downloads (.giga files) to app data
* stop downloads when swicthing to mobile network (never works, see 2nd point)
* save the thread count for next downloads
* a lot of incoherences fixed
* delete DownloadManagerTest.java (too many changes to keep this file updated)
obsolete layout params
Ellipsis string can be replaced with ellipsis character
Missing inputType
Usage of showAsAction=always
BUILD SUCCESSFUL in 5s
39 actionable tasks: 4 executed, 35 up-to-date
-White icon was barely visible on bright backgrounds
-Secondly, drawable is set programmatically anyway and so it's setting in
XML is good just for a confusion
-Previous version used emojis for brightness and volume icons, which may
be inconsistent across devices and do not fit well with other parts of UI
(Frankly, previous version was more informative than eye-candy)
-This commit replaces old version with circular progress bar that shows
current value (before conversion). Gesture mode (volume/brightness) is
indicated by icon that changes between (4/3) modes according to current
value
-Text information about current value was removed, because with progress
bar present it does not add any real value to UI.
Translated using Weblate (Swedish)
Currently translated at 100.0% (383 of 383 strings)
Translated using Weblate (Chinese (Mandarin))
Currently translated at 27.4% (105 of 383 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 97.1% (372 of 383 strings)
Translated using Weblate (German)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Russian)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Russian)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Russian)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Russian)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Russian)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Russian)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Russian)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Russian)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Arabic)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Basque)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Dutch)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Spanish)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Catalan)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Chinese (Traditional))
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (German)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Turkish)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Portuguese (Brazil))
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Ukrainian)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Swedish)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (French)
Currently translated at 97,1% (372 of 383 strings)
Translated using Weblate (French)
Currently translated at 97,1% (372 of 383 strings)
Translated using Weblate (Russian)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Arabic)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Basque)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Dutch)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Spanish)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Catalan)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Chinese (Traditional))
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (German)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Ukrainian)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Swedish)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Turkish)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Portuguese (Brazil))
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Estonian)
Currently translated at 91.6% (351 of 383 strings)
Translated using Weblate (Russian)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Russian)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Russian)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Russian)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Russian)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Russian)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Russian)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Russian)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Russian)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Russian)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Russian)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Russian)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Russian)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Russian)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Russian)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Russian)
Currently translated at 100,0% (383 of 383 strings)
PLEASE READ THESE GUIDELINES CAREFULLY BEFORE ANY CONTRIBUTION!
## Crash reporting
Do not report crashes in the GitHub issue tracker. NewPipe has an automated crash report system that will ask you to send a report via e-mail when a crash occurs. This contains all the data we need for debugging, and allows you to even add a comment to it. You'll see exactly what is sent, the system is 100% transparent.
Report crashes through the automated crash report system of NewPipe.
This way all the data needed for debugging is included in your bugreport for GitHub.
You'll see exactly what is sent, be able to add your comments, and then send it.
## Issue reporting/feature requests
*Search the [existing issues](https://github.com/TeamNewPipe/NewPipe/issues) first to make sure your issue/feature hasn't been reported/requested before
* Check whether your issue/feature is already fixed/implemented
* Check if the issue still exists in the latest release/beta version
* If you are an Android/Java developer, you are always welcome to fix/implement an issue/a feature yourself. PRs welcome!
*We use English for development. Issues in other languages will be closed and ignored.
*Please only add *one* issue at a time. Do not put multiple issues into one thread.
*When reporting a bug please give us a context, and a description how to reproduce it.
* Issues that only contain a generated bug report, but no describtion might be closed.
***Already reported**? Browse the [existing issues](https://github.com/TeamNewPipe/NewPipe/issues) to make sure your issue/feature hasn't been reported/requested.
* **Already fixed**? Check whether your issue/feature is already fixed/implemented.
* **Still relevant**? Check if the issue still exists in the latest release/beta version.
* **Can you fix it**? If you are an Android/Java developer, you are always welcome to fix an issue or implement a feature yourself. PRs welcome! See [Code contribution](#code-contribution) for more info.
***Is it in English**? Issues in other languages will be ignored unless someone translates them.
***Is it one issue**? Multiple issues require multiple reports, that can be linked to track their statuses.
***The template**: Fill it out, everyone wins. Your issue has a chance of getting fixed.
## Bug Fixing
* If you want to help NewPipe to become free of bugs (this is our utopic goal for NewPipe), you can send us an email to tnp@newpipe.schabi.org to let me know that you intend to help. We'll send you further instructions. You may, on request, register at our [Sentry](https://sentry.schabi.org) instance (see section "Crash reporting" for more information.
## Translation
* NewPipe can be translated via [Weblate](https://hosted.weblate.org/projects/newpipe/strings/). You can log in there with your GitHub account.
* NewPipe is translated via [Weblate](https://hosted.weblate.org/projects/newpipe/strings/). Log in there with your GitHub account, or register.
* Add the language you want to translate if it is not there already: see [How to add a new language](https://github.com/TeamNewPipe/NewPipe/wiki/How-to-add-a-new-language-to-NewPipe) in the wiki.
## Code contribution
*Stick to NewPipe's style conventions (well, just look the other code and then do it the same way :))
*Do not bring non-free software (e.g., binary blobs) into the project. Also, make sure you do not introduce Google libraries.
* Stick to [F-Droid contribution guidelines](https://f-droid.org/wiki/page/Inclusion_Policy)
*Make changes on a separate branch, not on the master branch. This is commonly known as *feature branch workflow*. You may then send your changes as a pull request on GitHub. Patches to the email address mentioned in this document might not be considered, GitHub is the primary platform. (This only affects you if you are a member of TeamNewPipe)
* When submitting changes, you confirm that your code is licensed under the terms of the [GNU General Public License v3](https://www.gnu.org/licenses/gpl-3.0.html).
*Please test (compile and run) your code before you submit changes! Ideally, provide test feedback in the PR description. Untested code will **not** be merged!
*If you want to help out with an existing bug report or feature request, leave a comment on that issue saying you want to try your hand at it.
*If there is no existing issue for what you want to work on, open a new one describing your changes. This gives the team and the community a chance to give feedback before you spend time on something that is already in development, should be done differently, or should be avoided completely.
* Stick to NewPipe's style conventions of [checkStyle](https://github.com/checkstyle/checkstyle). It runs each time you build the project.
*Do not bring non-free software (e.g. binary blobs) into the project. Make sure you do not introduce Google
libraries.
*Stick to [F-Droid contribution guidelines](https://f-droid.org/wiki/page/Inclusion_Policy).
* Make changes on a separate branch with a meaningful name, not on the _master_ branch or the _dev_ branch. This is commonly known as *feature branch workflow*. You may then send your changes as a pull request (PR) on GitHub.
* Please test (compile and run) your code before submitting changes! Ideally, provide test feedback in the PR description. Untested code will **not** be merged!
* Make sure your PR is up-to-date with the rest of the code. Often, a simple click on "Update branch" will do the job, but if not, you must rebase the dev branch manually and resolve the problems on your own. You can find help [on the wiki](https://github.com/TeamNewPipe/NewPipe/wiki/How-to-merge-a-PR). That makes the maintainers' jobs way easier.
* Please show intention to maintain your features and code after you contribute a PR. Unmaintained code is a hassle for core developers. If you do not intend to maintain features you plan to contribute, please rethink your submission, or clearly state that in the PR description.
* Respond if someone requests changes or otherwise raises issues about your PRs.
* Send PRs that only cover one specific issue/solution/bug. Do not send PRs that are huge and consist of multiple independent solutions.
* Try to figure out yourself why builds on our CI fail.
* Make sure your PR is up-to-date with the rest of the code. Often, a simple click on "Update branch" will do the job, but if not, you are asked to merge the master branch manually and resolve the problems on your own. That will make the maintainers' jobs way easier.
* Please show intention to maintain your features and code after you contributed it. Unmaintained code is a hassle for the core developers, and just adds work. If you do not intend to maintain features you contributed, please think again about submission, or clearly state that in the description of your PR.
* Respond yourselves if someone requests changes or otherwise raises issues about your PRs.
* Check if your contributions align with the [fdroid inclusion guidelines](https://f-droid.org/en/docs/Inclusion_Policy/).
* Check if your submission can be build with the current fdroid build server setup.
## Communication
*WE DO NOW HAVE A MAILING LIST: [newpipe@list.schabi.org](https://list.schabi.org/cgi-bin/mailman/listinfo/newpipe).
*There is an IRC channel on Freenode which is regularly visited by the core team and other developers: [#newpipe](irc:irc.freenode.net/newpipe). [Click here for Webchat](https://webchat.freenode.net/?channels=newpipe)!
*If you want to get in touch with the core team or one of our other contributors you can send an email to tnp(at)schabi.org. Please do not send issue reports, they will be ignored and remain unanswered! Use the GitHub issue tracker described above!
* Feel free to post suggestions, changes, ideas etc. on GitHub, IRC or the mailing list!
*The #newpipe channel on Libera Chat (`ircs://irc.libera.chat:6697/newpipe`) has the core team and other developers in it. [Click here for webchat](https://web.libera.chat/#newpipe)!
*You can also use a Matrix account to join the NewPipe channel at [#newpipe:libera.chat](https://matrix.to/#/#newpipe:libera.chat).
*Post suggestions, changes, ideas etc. on GitHub or IRC.
Oh no, a bug! It happens. Thanks for reporting an issue with NewPipe. To make it easier for us to help you please enter detailed information in the template we have provided below. If a section isn't relevant, just delete it, though it would be helpful to still provide as much detail as possible.
-->
<!-- IF YOU DON'T FILL IN THE TEMPLATE PROPERLY, YOUR ISSUE IS LIABLE TO BE CLOSED. If you feel tired/lazy right now, open your issue some other time. We'll wait. -->
<!-- The comments between these brackets won't show up in the submitted issue (as you can see in the Preview). -->
### Checklist
<!-- This checklist is COMPULSORY. The first box has been checked for you to show you how it is done. -->
- [x] I am using the latest version - x.xx.x <!-- Check https://github.com/TeamNewPipe/NewPipe/releases -->
- [ ] I checked, but didn't find any duplicates (open OR closed) of this issue in the repo. <!-- Seriously, check. O_O -->
- [ ] I have read the contribution guidelines given at https://github.com/TeamNewPipe/NewPipe/blob/HEAD/.github/CONTRIBUTING.md.
- [ ] This issue contains only one bug. I will open one issue for every bug report I want to file.
### Steps to reproduce the bug
<!--
1. Go to '...'
2. Press on '....'
3. Swipe down to '....'
-->
<!-- If you can't cause the bug to show up again reliably (and hence don't have a proper set of steps to give us), please still try to give as many details as possible on how you think you encountered the bug. -->
### Actual behaviour
<!-- Tell us what happens with the steps given above. -->
### Expected behavior
<!-- Tell us what you expect to happen. -->
### Screenshots/Screen recordings
<!-- If applicable, add screenshots or a screen recording to help explain your problem. GitHub supports uploading them directly in the issue text box. If your file is too big for Github to accept, feel free to paste a link from an image/video hoster here instead. -->
<!-- DON'T POST SCREENSHOTS OF THE ERROR PAGE. Use the buttons given on the error page to paste the error as text in the Logs section below. -->
### Logs
<!-- If your bug includes a crash (where you're shown the Error Report page with a bunch of info), tap on "Copy formatted report" at the bottom and paste it here: -->
<!-- That's right, here! -->
<!-- Please fill this out when you do not provide a log generate by NewPipe -->
<!-- IF YOU DON'T FILL IN THE TEMPLATE PROPERLY, YOUR ISSUE IS LIABLE TO BE CLOSED. If you feel tired/lazy right now, open your issue some other time. We'll wait. -->
<!-- The comments between these brackets won't show up in the submitted issue (as you can see in the Preview). -->
### Checklist
<!-- This checklist is COMPULSORY. The first box has been checked for you to show you how it is done. -->
- [x] I checked, but didn't find any duplicates (open OR closed) of this issue in the repo. <!-- Seriously, check. O_O -->
- [ ] I have read the contribution guidelines given at https://github.com/TeamNewPipe/NewPipe/blob/HEAD/.github/CONTRIBUTING.md.
- [ ] This issue contains only one feature request. I will open one issue for every feature I want to request.
#### Describe the feature you want
<!-- A clear and concise description of what you wish should happen.
Example: *I think it would be nice if you add feature Y which makes X possible.*
Optionally, also describe alternatives you've considered.
Example: *Z is also a good alternative. Not as good as Y, but at least...* or *I considered Z, but that didn't turn out to be a good idea because...* -->
#### Is your feature request related to a problem? Please describe it
<!-- A clear and concise description of what the problem is. Maybe the developers and the community could brainstorm and come up with a better solution to your problem. If they exist, link to related Issues and/or PRs for developers to keep track easier.
Example: *I want to do X, but there is no way to do it.* -->
#### Additional context
<!-- Add any other context, like screenshots, about the feature request here.
Example: *Here's a photo of my cat!* -->
#### How will you/everyone benefit from this feature?
<!-- Convince us! How does it change your NewPipe experience and/or your life?
The better this paragraph is, the more likely a developer will think about working on it.
Example: *This feature will help us colonize the galaxy! -->
- [ ] I carefully read the [contribution guidelines](https://github.com/TeamNewPipe/NewPipe/blob/HEAD/.github/CONTRIBUTING.md) and agree to them.
<!-- Hey there. Thank you so much for improving NewPipe, and filling out the details. Having roughly the same layout helps everyone considerably :)-->
#### What is it?
- [ ] Bugfix (user facing)
- [ ] Feature (user facing)
- [ ] Codebase improvement (dev facing)
- [ ] Meta improvement to the project (dev facing)
#### Description of the changes in your PR
<!-- While bullet points are the norm in this section, feel free to write free-form text instead of a list -->
- record videos
- create clones
- take over the world
#### Fixes the following issue(s)
<!-- Prefix issues with "Fixes" so that GitHub closes them when the PR is merged (note that each "Fixes #" should be in its own item). Also add any other relevant links. -->
- Fixes #
#### Relies on the following changes
<!-- Delete this if it doesn't apply to you. -->
-
#### APK testing
<!-- Use a new, meaningfully named branch. The name is used as a suffix for the app ID to allow installing and testing multiple versions of NewPipe, e.g. "commentfix", if your PR implements a bugfix for comments. (No names like "patch-0" and "feature-1".) -->
<!-- Remove the following line if you directly link the APK created by the CI pipeline. Directly linking is preferred if you need to let users test.-->
On the website the APK can be found by going to the "Checks" tab below the title and then on "artifacts" on the right.
#### Due diligence
- [ ] I read the [contribution guidelines](https://github.com/TeamNewPipe/NewPipe/blob/HEAD/.github/CONTRIBUTING.md).
<a href="https://hosted.weblate.org/engage/newpipe/es/" alt="Estado de la traducción"><img src="https://hosted.weblate.org/widgets/newpipe/es/svg-badge.svg"></a>
*Lea esto en otros idiomas: [English](README.md), [한국어](README.ko.md), [Soomaali](README.so.md), [Português Brasil](README.pt_BR.md), [日本語](README.ja.md), [Română](README.ro.md), [Türkçe](README.tr.md).*
<b>AVISO: ESTA ES UNA VERSIÓN BETA, POR LO TANTO, PUEDE ENCONTRAR BUGS (ERRORES). SI ENCUENTRA UNO, ABRA UN ISSUE A TRAVÉS DE NUESTRO REPOSITORIO GITHUB.</b>
<b>COLOCAR NEWPIPE O CUALQUIER FORK (BIFURCACIÓN) REALIZADO DE ELLO EN GOOGLE PLAY STORE VIOLA SUS TÉRMINOS Y CONDICIONES.</b>
NewPipe no usa ninguna librería de framework de Google, ni la API de YouTube. Los sitios web solamente se analizan para extraer la información requerida, asi que esta app se puede usar sin los servicios de Google instalados. Además, no se necesita una cuenta de YouTube para usar NewPipe, lo cual es un software libre de copyleft.
### Características
* Buscar videos
* Mostrar información general sobre videos
* Mirar videos de YouTube
* Escuchar audio de YouTube
* Modo popup (reproductor flotante)
* Elegir reproductor para mirar el video
* Descargar videos
* Descargar solamente audio
* Abrir video en Kodi
* Mostrar videos próximos/relacionados
* Buscar a través de YouTube en un idioma específico
* Mirar/Bloquear materiales restringidas por edad.
* Mostrar información general sobre canales
* Buscar canales
* Mirar videos de un canal
* Apoyo Orbot/Tor (todavía no directamente)
* Apoyo 1080p/2K/4K
* Ver historias
* Subscribirse a canales
* Buscar historias
* Buscar/mirar listas de reproducción
* Mirar listas de reproducción en fila
* Poner videos en fila
* Listas locales de reproducción
* Subtítulos
* Apoyo de medios en directo
* Mostrar comentarios
### Servicios apoyados
NewPipe apoya varios servicios. Nuestras [documentaciones](https://teamnewpipe.github.io/documentation/) proveen más información en como se puede agregar un servicio nuevo a la app y el extractor. Por favor contáctenos si pretende agregar uno nuevo. Actualmente los servicios apoyados son:
* YouTube
* SoundCloud \[beta\]
* media.ccc.de \[beta\]
* PeerTube instances \[beta\]
* Bandcamp \[beta\]
<!-- Brecha escondida para mantener compatibles los enlaces viejos. -->
<span id="actualizaciones"></span>
## Installación y actualizaciones
Se puede instalar NewPipe usando uno de los métodos siguientes:
1. Agregar nuestro repositorio personalizado a F-Droid e instalarlo desde allí. Las instrucciones están aquí: https://newpipe.net/FAQ/tutorials/install-add-fdroid-repo/
2. Descargar el archivo APK del enlace [Github Releases](https://github.com/TeamNewPipe/NewPipe/releases) e instalarlo.
3. Actualizar a través de F-Droid. Este es el método más lento para obtener la actualización, como F-Droid debe reconocer cambios, construir el APK aparte, firmarlo con una clave, y finalmente empujar la actualización a los usuarios.
4. Construir un APK de depuración por si mismo. Este es el modo más rápido para realizar nuevas características en su dispositivo, pero es mucho más complicado, asi que recomendamos uno de los otros métodos.
Recomendamos el método 1 para la mayoría de usuarios. Los APKs instalados usando método 1 o 2 son compatibles el uno con el otro, pero no con las instalaciones usando método 3. Esta es debida a la misma clave digital (la nuestra), siendo utilizado en los métodos 1 y 2, pero una clave digital diferente (la de F-Droid) siendo utilizado en el método 3. Construir un APK de depuración usando método 4 excluye una clave enteramente. Firmando con claves digitales ayuda a asegurar de que un
usuario no esté engañado para instalar una actualización maliciosa a una app.
Mientras tanto, si quiere cambiar los fuentes por alguna razón (por ejemplo, la funcionalidad del nucleo de NewPipe se rompe y F-Droid aun no tiene la actualización), recomendamos el siguiente procedimiento:
1. Repaldear sus datos a través de Ajustes > Contenido > Exporta base de datos para guardar su historia, subscripciones, y listas de reproducción
2. Desinstalar NewPipe
3. Descargar el APK del nuevo fuente e instalarlo.
4. Importar los datos del paso 1 a través de Ajustes > Contenido > Importa base de datos.
## Contribución
Si tiene ideas, traducciónes, cambios de diseño, limpieza de código, o cambios grandes de código, su ayuda es siempre bienvenida.
Cuanto más realizamos, mejor se pone la aplicación!
Si quiere involucrarse, fíjese en nuestras [notas de contribución](.github/CONTRIBUTING.md).
<img src="https://hosted.weblate.org/widgets/newpipe/es/287x66-grey.png" alt="Estado de la traducción" />
</a>
## Donar
Si le gusta el NewPipe estaremos felices con una donación. O puede enviar bitcoin o donar a través de Bountysource o Liberapay. Para obtener más información sobre como donar a NewPipe, por favor visita nuestro [sitio web](https://newpipe.net/donate).
<td><a href="https://www.bountysource.com/teams/newpipe"><img src="assets/bountysource_qr_code.png" alt="Visit NewPipe at bountysource.com" width="100px"></a></td>
<td><a href="https://www.bountysource.com/teams/newpipe/issues"><img src="https://img.shields.io/bountysource/team/newpipe/activity.svg?colorB=cd201f" height="30px" alt="Check out how many bounties you can earn."></a></td>
</tr>
</table>
## Política de privacidad
El proyecto NewPipe tiene como objetivo proveer una experience privada y anónima para usar servicios de medios web.
Por lo tanto, la app no colecciona ningunos datos sin su consentimiento. La politica de privacidad de NewPipe explica en detalle los datos enviados y almacenados cuando envia un informe de error, o comentario en nuestro blog. Puede encontrar el documento [aqui](https://newpipe.net/legal/privacy/).
NewPipe es Software Libre: Puede usar, estudiar, compartir, y mejorarlo a su voluntad. Especificamente puede redistribuir y/o modificarlo bajo los términos de la [GNU General Public License](https://www.gnu.org/licenses/gpl.html) como publicado por la Free Software Foundation, o versión 3 de la licencia, o (en su opción) cualquier versión posterior.
自由なコピーレフトソフトウェアの NewPipe は一切の Google フレームワークライブラリ及び、YouTube API を使用しません。ウェブサイトは必要な情報のためだけに読み込まれるため、このアプリは Google のサービスがインストールされていない端末で使用ができます。また、NewPipe の使用に YouTube アカウントは必要となりません。
具体的には、フリーソフトウェア財団により公開された [GNU General Public License](https://www.gnu.org/licenses/gpl.html) のバージョン3のライセンスもしくは、(あなたの選択で) いずれかの後継バージョンの規約の元で配布または改変を行うことができます。
*Read this in other languages: [English](README.md), [Español](README.es.md), [한국어](README.ko.md), [Soomaali](README.so.md), [Português Brasil](README.pt_BR.md), [日本語](README.ja.md), [Română](README.ro.md), [Türkçe](README.tr.md).*
<b>경고: 이 버전은 베타 버전이므로, 버그가 발생할 수도 있습니다. 만약 버그가 발생하였다면, 우리의 GITHUB 저장소에서 ISSUE를 열람하여 주십시오.</b>
<b>NEWPIPE 또는 이것의 FORK을 구글 플레이스토어에 올리는 것은 그들의 이용약관을 위반합니다.</b>
NewPipe는 어떤 구글 프레임워크 라이브러리나, 유튜브 API를 사용하지 않습니다. 웹사이트는 단지 필요한 정보를 가져오기 위해 구문 분석 됩니다. 따라서 이 앱은 구글 서비스의 설치 없이 기기에서 사용될 수 있습니다. 또한, 카피레프트 자유 소프트웨어인 NewPipe를 사용하기 위해 유튜브 계정이 필요하지 않습니다.
### Features
* 영상 검색
* 영상의 일반적인 정보 표시
* 유튜브 영상 보기
* 유튜브 영상 듣기
* 팝업 모드 (floating player)
* 영상 공유
* 영상 다운로드
* 음성만 다운로드
* Kodi에서 영상 열람
* 다음/관련된 영상 표시
* 특정 언어로 유튜브 검색
* 연령 제한 컨텐츠 시청/차단
* 채널에 대한 일반적인 정보 표시
* 채널 검색
* 채널에서 영상 시청
* Orbot/Tor 지원 (아직 직접적이지 않음)
* 1080p/2K/4K 지원
* 기록 보기
* 채널 구독
* 기록 검색
* 재생목록 검색/시청
* 추가된 재생목록 시청
* 영상 추가
* 지역 재생목록
* 자막
* 실시간 방송 지원
* 댓글 표시
### Supported Services
NewPipe는 여러가지 서비스를 지원합니다. 우리의 [문서](https://teamnewpipe.github.io/documentation/)는 새로운 서비스가 앱과 추출기에 어떻게 추가될 수 있는지에 대한 더 많은 정보를 제공합니다. 만약 새로운 서비스를 추가하고자 한다면, 우리에게 연락해 주시기 바랍니다. 현재 지원되는 서비스:
* YouTube
* SoundCloud \[beta\]
* media.ccc.de \[beta\]
* PeerTube instances \[beta\]
* Bandcamp \[beta\]
## Updates
NewPipe 코드의 변경이 있을 때(기능 추가 또는 버그 수정으로 인해), 결국 릴리즈가 발생할 것입니다. 이것들의 형식은 x.xx.x 입니다.
이 새로운 버전을 얻기 위해서, 당신은:
1. 직접 디버그 APK를 생성할 수 있습니다. 이 방법은 당신의 기기에서 새로운 기능을 얻을 수 있는 가장 빠른 방법이지만, 꽤 많이 복잡합니다.
따라서 우리는 다른 방법들 중 하나를 사용하는 것을 추천합니다.
2. 우리의 커스텀 저장소를 F-Droid에 추가하고 우리가 릴리즈를 게시하는 대로 저곳에서 릴리즈를 설치할 수 있습니다.
이에 대한 설명서는 이곳에서 확인할 수 있습니다: https://newpipe.net/FAQ/tutorials/install-add-fdroid-repo/
3. 우리가 릴리즈를 게시하는 대로 [Github Releases](https://github.com/TeamNewPipe/NewPipe/releases)에서 APK를 다운받고 이것을 설치할 수 있습니다.
4. F-Droid를 통해 업데이트 할 수 있습니다. F-Droid는 변화를 인식하고, 스스로 APK를 생성하고, 이것에 서명하고, 사용자들에서 업데이트를 전달해야만 하기 때문에,
이것은 업데이트를 받는 가장 느린 방법입니다.
우리는 대부분의 사용자에게 2번쨰 방법을 추천합니다. 방법 2 또는 3을 사용하여 설치된 APK는 서로 호환되지만, 방법 4를 사용하여 설치된 것들과는 호환되지 않습니다. 이것은 방법 2 또는 3에서는 같은 (우리의)서명 키가 사용되지만, 방법 4에서는 다른 (F-Droid의)서명 키가 사용되기 때문입니다. 방법 1을 사용하여 디버그 APK를 생성하는 것에서는 키가 완전히 제외됩니다. 서명 키는 사용자가 앱에 악의적인 업데이트를 설치하는 것에 대해 속지 않도록 보장하는 것을 도와줍니다.
한편, 만약 어떠한 이유(예. NewPipe의 핵심 기능이 손상되었고 F-Droid가 아직 업데이트를 가지지 않는 경우) 때문에 소스를 바꾸길 원한다면,
우리는 다음과 같은 절차를 따르는 것을 권장합니다:
1. 당신의 기록, 구독, 그리고 재생목록을 유지할 수 있도록 Settings > Content > Export Database 를 통해 데이터를 백업하십시오.
2. NewPipe를 삭제하십시오.
3. 새로운 소스에서 APK를 다운로드하고 이것을 설치하십시오.
4. Step 1의 Settings > Content > Import Database 을 통해 데이터를 불러오십시오.
## Contribution
당신이 아이디어, 번역, 디자인 변경, 코드 정리, 또는 정말 큰 코드 수정에 대한 의견이 있다면, 도움은 항상 환영합니다.
더 많이 수행될수록 더 많이 발전할 수 있습니다!
만약 참여하고 싶다면, 우리의 [컨트리뷰션 공지](.github/CONTRIBUTING.md)를 참고하십시오.
만약 NewPipe가 마음에 들었다면, 우리는 기부에 대해 기꺼이 환영합니다. bitcoin을 보내거나, Bountysource 또는 Liberapay를 통해 기부할 수 있습니다. NewPipe에 기부하는 것에 대한 자세한 정보를 원한다면, 우리의 [웹사이트](https://newpipe.net/donate)를 방문하여 주십시오.
<td><a href="https://www.bountysource.com/teams/newpipe"><img src="assets/bountysource_qr_code.png" alt="Visit NewPipe at bountysource.com" width="100px"></a></td>
<td><a href="https://www.bountysource.com/teams/newpipe/issues"><img src="https://img.shields.io/bountysource/team/newpipe/activity.svg?colorB=cd201f" height="30px" alt="Check out how many bounties you can earn."></a></td>
</tr>
</table>
## Privacy Policy
NewPipe 프로젝트는 미디어 웹 서비스를 사용하는 것에 대한 사적의, 익명의 경험을 제공하는 것을 목표로 하고 있습니다.
그러므로, 앱은 당신의 동의 없이 어떤 데이터도 수집하지 않습니다. NewPipe의 개인정보보호정책은 당신이 충돌 리포트를 보내거나, 또는 우리의 블로그에 글을 남길 때 어떤 데이터가 보내지고 저장되는지에 대해 상세히 설명합니다. 이 문서는 [여기](https://newpipe.net/legal/privacy/)에서 확인할 수 있습니다.
*Read this in other languages: [English](README.md), [Español](README.es.md), [한국어](README.ko.md), [Soomaali](README.so.md), [Português Brasil](README.pt_BR.md), [日本語](README.ja.md), [Română](README.ro.md), [Türkçe](README.tr.md).*
<b>WARNING: THIS IS A BETA VERSION, THEREFORE YOU MAY ENCOUNTER BUGS. IF YOU DO, OPEN AN ISSUE VIA OUR GITHUB REPOSITORY.</b>
<b>PUTTING NEWPIPE OR ANY FORK OF IT INTO THE GOOGLE PLAY STORE VIOLATES THEIR TERMS AND CONDITIONS.</b>
NewPipe does not use any Google framework libraries, or the YouTube API. It only parses the website in order to gain the information it needs. Therefore this app can be used on devices without Google Services installed. Also, you don't need a YouTube account to use NewPipe, and it's FLOSS.
NewPipe does not use any Google framework libraries, nor the YouTube API. Websites are only parsed to fetch required info, so this app can be used on devices without Google services installed. Also, you don't need a YouTube account to use NewPipe, which is copylefted libre software.
### Features
* Search videos
*Display general information about a video
*No Login Required
* Display general info about videos
* Watch YouTube videos
* Listen to YouTube videos
* Popup mode (floating player)
* Select the streaming player to watch the video with
* Download videos
* Select streaming player to watch video with
* Download videos
* Download audio only
* Open a video in Kodi
* Show Next/Related videos
* Show next/related videos
* Search YouTube in a specific language
* Watch/Block age restricted material
* Display general information about channels
* Display general info about channels
* Search channels
* Watch videos from a channel
* Orbot/Tor support (not yet directly)
* 1080p/2k/4k support
* 1080p/2K/4K support
* View history
* Subscribe to channels
* Search history
* Search/Watch Playlists
* Watch as queues Playlists
*Queuing videos
* Search/watch playlists
* Watch as enqueued playlists
*Enqueue videos
* Local playlists
* Subtitles
* Multi-service support (eg. SoundCloud in NewPipe Beta)
### Coming Features
* Livestream support
* Cast to UPnP and Cast
* Show comments
* ... and many more
### Supported Services
NewPipe supports multiple services. Our [docs](https://teamnewpipe.github.io/documentation/) provide more info on how a new service can be added to the app and the extractor. Please get in touch with us if you intend to add a new one. Currently supported services are:
* YouTube
* SoundCloud \[beta\]
* media.ccc.de \[beta\]
* PeerTube instances \[beta\]
* Bandcamp \[beta\]
<!-- Hidden span to keep old links compatible. -->
<span id="updates"></span>
## Installation and updates
You can install NewPipe using one of the following methods:
1. Add our custom repo to F-Droid and install it from there. The instructions are here: https://newpipe.net/FAQ/tutorials/install-add-fdroid-repo/
2. Download the APK from [Github Releases](https://github.com/TeamNewPipe/NewPipe/releases) and install it.
3. Update via F-Droid. This is the slowest method of getting updates, as F-Droid must recognize changes, build the APK itself, sign it, then push the update to users.
4. Build a debug APK yourself. This is the fastest way to get new features on your device, but is much more complicated, so we recommend using one of the other methods.
We recommend method 1 for most users. APKs installed using method 1 or 2 are compatible with each other, but not with those installed using method 3. This is due to the same signing key (ours) being used for 1 and 2, but a different signing key (F-Droid's) being used for 3. Building a debug APK using method 4 excludes a key entirely. Signing keys help ensure that a user isn't tricked into installing a malicious update to an app.
In the meanwhile, if you want to switch sources for some reason (e.g. NewPipe's core functionality breaks and F-Droid doesn't have the latest update yet), we recommend following this procedure:
1. Back up your data via Settings > Content > Export Database so you keep your history, subscriptions, and playlists
2. Uninstall NewPipe
3. Download the APK from the new source and install it
4. Import the data from step 1 via Settings > Content > Import Database
## Contribution
Whether you have ideas, translations, design changes, code cleaning, or real heavy code changes, help is always welcome.
@@ -76,29 +107,38 @@ The more is done the better it gets!
If you'd like to get involved, check our [contribution notes](.github/CONTRIBUTING.md).
If you like NewPipe we'd be happy about a donation. You can either donate via Bitcoin, Bountysource or Liberapay. For further information about donating to NewPipe, please visit our [website](https://newpipe.schabi.org/donate).
If you like NewPipe we'd be happy about a donation. You can either send bitcoin or donate via Bountysource or Liberapay. For further info on donating to NewPipe, please visit our [website](https://newpipe.net/donate).
<td><a href="https://www.bountysource.com/teams/newpipe"><img src="assets/bountysource_qr_code.png" alt="Visit NewPipe at bountysource.com" width="100px"/></a></td>
<td><a href="https://www.bountysource.com/teams/newpipe/issues"><img src="https://img.shields.io/bountysource/team/newpipe/activity.svg?colorB=cd201f" height="30px" alt="Check out how many bounties you can earn." /></a></td>
<td><a href="https://www.bountysource.com/teams/newpipe"><img src="assets/bountysource_qr_code.png" alt="Visit NewPipe at bountysource.com" width="100px"></a></td>
<td><a href="https://www.bountysource.com/teams/newpipe/issues"><img src="https://img.shields.io/bountysource/team/newpipe/activity.svg?colorB=cd201f" height="30px" alt="Check out how many bounties you can earn."></a></td>
</tr>
</table>
## Privacy Policy
The NewPipe project aims to provide a private, anonymous experience for using media web services.
Therefore, the app does not collect any data without your consent. NewPipe's privacy policy explains in detail what data is sent and stored when you send a crash report, or comment in our blog. You can find the document [here](https://newpipe.net/legal/privacy/).
*Read this in other languages: [English](README.md), [Español](README.es.md), [한국어](README.ko.md), [Soomaali](README.so.md), [Português Brasil](README.pt_BR.md), [日本語](README.ja.md), [Română](README.ro.md), [Türkçe](README.tr.md).*
<b>AVISO: ESTA É UMA VERSÃO BETA, PORTANTO, VOCÊ PODE ENCONTRAR BUGS. ENCONTROU ALGUM, ABRA UM ISSUE ATRAVÉS DO NOSSO REPOSITÓRIO GITHUB.</b>
<b>COLOCAR NEWPIPE OU QUALQUER FORK DELE NA GOOGLE PLAY STORE VIOLA SEUS TERMOS E CONDIÇÕES.</b>
O NewPipe não usa nenhuma biblioteca de framework do Google, nem a API do YouTube. Os sites são apenas analisados para obter informações necessárias, para que este aplicativo possa ser usado em dispositivos sem os serviços do Google instalados. Além disso, você não precisa de uma conta no YouTube para usar o NewPipe, que é um software livre com copyleft.
### Características
* Procurar vídeos
* Exibir informações gerais sobre vídeos
* Assista aos vídeos do YouTube
* Ouça vídeos do YouTube
* Modo popup (player flutuante)
* Selecione o player para assistir streaming
* Baixar vídeos
* Baixar somente áudio
* Abrir vídeo no Kodi
* Mostrar vídeos próximos/relacionados
* Pesquise no YouTube em um idioma específico
* Assistir/Bloquear material restrito
* Exibir informações gerais sobre canais
* Pesquisar canais
* Assista a vídeos de um canal
* Suporte Orbot/Tor (ainda não diretamente)
* Suporte 1080p/2K/4K
* Ver histórico
* Inscreva-se nos canais
* Procurar histórico
* Porcurar/Assistir playlists
* Assistir playlists em fila
* Vídeos em fila
* Playlists Local
* Legenda
* Suporte a live
* Mostrar comentários
### Serviços Suportados
O NewPipe suporta vários serviços. Nosso [documentação](https://teamnewpipe.github.io/documentation/) fornecer mais informações sobre como um novo serviço pode ser adicionado ao aplicativo e ao extrator. Por favor, entre em contato conosco se você pretende adicionar um novo. Atualmente, os serviços suportados são:
* YouTube
* SoundCloud \[beta\]
* media.ccc.de \[beta\]
* PeerTube instances \[beta\]
* Bandcamp \[beta\]
## Atualizações
Quando uma alteração no código NewPipe (devido à adição de recursos ou fixação de bugs), eventualmente ocorrerá uma versão. Estes estão no formato x.xx.x . A fim de obter esta nova versão, você pode:
1. Construa um APK de depuração você mesmo. Esta é a maneira mais rápida de obter novos recursos em seu dispositivo, mas é muito mais complicado, por isso recomendamos usar um dos outros métodos.
2. Adicione nosso repo personalizado ao F-Droid e instale-o a partir daí assim que publicarmos um lançamento. As instruções estão aqui.: https://newpipe.net/FAQ/tutorials/install-add-fdroid-repo/
3. Baixe o APK do [Github Releases](https://github.com/TeamNewPipe/NewPipe/releases) e instalá-lo assim que publicarmos um lançamento.
4. Atualização via F-droid. Este é o método mais lento para obter atualizações, pois o F-Droid deve reconhecer alterações, construir o próprio APK, assiná-lo e, em seguida, enviar a atualização para os usuários.
Recomendamos o método 2 para a maioria dos usuários. Os APKs instalados usando o método 2 ou 3 são compatíveis entre si, mas não com aqueles instalados usando o método 4. Isso se deve à mesma chave de assinatura (nossa) sendo usada para 2 e 3, mas uma chave de assinatura diferente (F-Droid's) está sendo usada para 4. Construir um APK depuração usando o método 1 exclui totalmente uma chave. Assinar chaves ajudam a garantir que um usuário não seja enganado para instalar uma atualização maliciosa em um aplicativo.
Enquanto isso, se você quiser trocar de fontes por algum motivo (por exemplo, a funcionalidade principal do NewPipe foi quebrada e o F-Droid ainda não tem a atualização), recomendamos seguir este procedimento:
1. Faça backup de seus dados através de Configurações > Conteúdo > Exportar Base de Dados para que você mantenha seu histórico, inscrições e playlists
2. Desinstale o NewPipe
3. Baixe o APK da nova fonte e instale-o
4. Importe os dados da etapa 1 via Configurações > Conteúdo > Inportar Banco de Dados
## Contribuição
Se você tem ideias, traduções, alterações de design, limpeza de códigos ou mudanças reais de código, a ajuda é sempre bem-vinda.
Quanto mais for feito, melhor fica!
Se você quiser se envolver, verifique nossa [notas de contribuição](.github/CONTRIBUTING.md).
Se você gosta de NewPipe, ficaríamos felizes com uma doação. Você pode enviar bitcoin ou doar via Bountysource ou Liberapay. Para obter mais informações sobre como doar para a NewPipe, visite nosso [site](https://newpipe.net/donate).
<td><a href="https://www.bountysource.com/teams/newpipe"><img src="assets/bountysource_qr_code.png" alt="Visit NewPipe at bountysource.com" width="100px"></a></td>
<td><a href="https://www.bountysource.com/teams/newpipe/issues"><img src="https://img.shields.io/bountysource/team/newpipe/activity.svg?colorB=cd201f" height="30px" alt="Check out how many bounties you can earn."></a></td>
</tr>
</table>
## Política de Privacidade
O projeto NewPipe tem como objetivo proporcionar uma experiência privada e anônima para o uso de serviços web de mídia.
Portanto, o aplicativo não coleta nenhum dado sem o seu consentimento. A política de privacidade da NewPipe explica em detalhes quais dados são enviados e armazenados quando você envia um relatório de erro ou comenta em nosso blog. Você pode encontrar o documento [aqui](https://newpipe.net/legal/privacy/).
*Citiţi în alte limbi: [English](README.md), [Español](README.es.md), [한국어](README.ko.md), [Soomaali](README.so.md), [Português Brasil](README.pt_BR.md), [日本語](README.ja.md), [Română](README.ro.md), [Türkçe](README.tr.md).*
<b>Atenţionare: ACEASTA ESTE O VERSIUNE BETA, AŞA CĂ S-AR PUTE SĂ ÎNTÂLNIŢI ERORI. DACĂ SE ÎNTÂMPLĂ ACEST LUCRU, DESCHIDEŢI UN ISSUE PRIN REPSITORY-UL NOSTRU GITHUB.</b>
<b>PUNERA NEWPIPE SAU ORICĂRUI FORK AL ACESTUIA ÎN MAGAZINUL GOOGLE PLAY LE ÎNCALCĂ TERMENII ŞI CONDIŢIILE.</b>
NewPipe nu foloseşte nici-o bibliotecă Google framework sau API-ul Youtube. Website-urile sunt doar analizate pentru a prelua informaţia necesară, aşa că această aplicaţie poate fi folosită pe telefoane fără Serviciile Google instalate. De asemenea, nu aveţi nevoie de un cont Youtube pentru a folosi Newpipe, care este sofware liber şi copylefted.
### Funcţii
* Căutarea videoclipurilor
* Nu este necesară logarea
* Afişarea informaţiilor generale despre videoclipuri
* Urmărirea videoclipurilor Youtube
* Ascultarea videoclipurilor Youtube
* Modul popup (player plutitor)
* Selectarea playerului de streaming pentru vizionarea videoclipului
* Descărcarea videoclipurilor
* Doar descărcarea sunetului
* Deschiderea videoclipurilor cu Kodi
* Expunerea videoclipurilor următoare/asociate
* Căutarea YouTube într-o limbă specifică
* Vizionarea/Blocarea materialului restricţionat în funcţie de vârstă
* Afişarea informaţiilor generale despre canale
* Căutarea canalelor
* Vizionarea videoclipurilor dintr-un canal
* Suport Orbot/Tor (încă nu direct)
* Suport 1080p/2K/4K
* Vizionarea istoricului
* Abonarea la canale
* Căutarea în istoric
* Căutarea/vizionarea playlisturilor
* Vizionarea ca playlisturi puse în coadă
* Punerea în coadă a videoclipurilor
* Playlisturi locale
* Subtitrări
* Suport al transmiterilor live
* Afişarea comentariilor
### Servicii întreţinute
NewPipe suportă servicii multiple. [Documentele](https://teamnewpipe.github.io/documentation/) noastre furnizează mai multe informaţii în legătură cu modalităţile prin care un nou serviciu poate fi adăugat aplicaţiei şi extractorului. Vă rugăm să ne contactaţi dacă doriţi să adăugaţi unul nou. Serviciile întreţinute acum sunt:
* YouTube
* SoundCloud \[beta\]
* media.ccc.de \[beta\]
* Instanţe PeerTube \[beta\]
* Bandcamp \[beta\]
<!-- Hidden span to keep old links compatible. -->
<span id="updates"></span>
## Instalare şi actualizări
Puteţi instala NewPipe folosind una dintre următoarele metode:
1. Adăugaţi depozitul nostru F-droid personalizat. Instrucţiunile sunt aici: https://newpipe.net/FAQ/tutorials/install-add-fdroid-repo/
2. Descărcaţi APK-ul din [Github Releases](https://github.com/TeamNewPipe/NewPipe/releases) şi instalaţi-l.
3. Actualizaţi via F-Droid. Aceasta este cea mai lentă metodă de a obţine actualizări, deoarece F-Droid trebuie să recunoască schimbările, să constriască APK-ul, să îl semneze, iar apoi să îl trimită utilizatorilor.
4. Construiţi un APK de depanare. Aceasta este cea mai rapidă metodă de a primi funcţii noi, dar este mult mai complicată, aşa că vă recomandăm să folosiţi una dintre celelalte metode.
Recomandăm metoda 1 pentru majoritatea utilizatorilor. APK-urile din metodele 1 şi 2 suntcompatibile una cu cealaltă, dar nu cu cele din metoda 3. Acest lucru se datorează faptului că aceeași cheie de semnare (a noastră) este utilizată pentru 1 și 2, dar o altă cheie de semnare (F-Droid) este utilizată pentru 3. Construirea unui APK de depanare folosind metoda 4 exclude o cheie în întregime. Cheile de semnare vă asigură că un utilizator nu este păcălit să instaleze o actualizare rău intenționată a unei aplicații.
Între timp, dacă doriți să schimbați sursa dintr-un anumit motiv (de exemplu, funcționalitatea de bază a NewPipe a fost întreruptă și F-Droid nu are încă actualizarea), vă recomandăm să folosiţi următoarea procedură:
1. Faceți o copie de rezervă a datelor prin Setări> Conținut> Exportați baza de date, astfel încât să vă păstrați istoricul, abonamentele și playlisturile
2. Dezinstalaţi NewPipe
3. Descărcaţi APK-ul din noua sursă şi instalaţi-l
4. Importați datele de la pasul 1 prin Setări> Conținut> Importare bază de date
## Contribuţie
Dacă aveţi idei, traduceri, schimbări de design, curaţarea codului, sau schimbări majore ale codului, ajutorul este întotdeauna binevenit.
Cu cât se face mai mult cu atât mai bună devine aplicaţia!
Dacă doriţi să vă implicaţi, accesaţi [notele noastre de contribuţie](.github/CONTRIBUTING.md).
Dacă vă place NewPipe, am fi bucuroşi să primim o donaţie. Puteţi să ne trimiteţi bitcoin sau să ne donaţi cu Bountysource sau Liberapay. Pentru mai multe informaţii în legătură cu donaţiile către NewPipe, vă rugăm vizitaţi [website-ul nostru](https://newpipe.net/donate).
<td><a href="https://www.bountysource.com/teams/newpipe"><img src="assets/bountysource_qr_code.png" alt="Visit NewPipe at bountysource.com" width="100px"></a></td>
<td><a href="https://www.bountysource.com/teams/newpipe/issues"><img src="https://img.shields.io/bountysource/team/newpipe/activity.svg?colorB=cd201f" height="30px" alt="Check out how many bounties you can earn."></a></td>
</tr>
</table>
## Politica de Confidenţialitate
Proiectul NewPipe îşi propune să furnizeze o experienţă privată şi anonimă pentru utilizarea serviciilor web media.
Prin urmare, aplicaţia nu colectează niciun fel de informaţii fără acordul dumneavoastră. Politica de confidențialitate a NewPipe explică în detaliu ce date sunt trimise și stocate atunci când trimiteți un raport de blocare sau comentați pe blogul nostru. Puteți găsi documentul [aici](https://newpipe.net/legal/privacy/).
NewPipe este Software Gratuit: Îl puteţi folosi şi împărtăşi cum doriţi. Mai exact, îl puteți redistribui și / sau modifica în conformitate cu termenii
[GNU General Public License](https://www.gnu.org/licenses/gpl.html) aşa cum a fost publicat de Free Software Foundation, fie versiunea 3 a Licenței, fie
<b>DIGNIIN: MIDKAN, NOOCA APP-KA EE HADDA WALI TIJAABO AYUU KU JIRAA, SIDAA DARTEED CILLADO AYAAD LA KULMI KARTAA. HADAAD LA KULANTO, KA FUR ARIN SHARAXAYA QAYBTANADA ARRIMAHA EE GITHUB-KA.</b>
<b>NEWPIPE AMA KUWA KU SALAYSAN IN PLAYSTORE-KA LA GALIYO WAXAY KA HOR IMANAYSAA SHARCIGA IYO SHURUUDAHA AY LEEYIHIIN.</b>
NewPipe ma isticmalo nidaamka wada shaqaynta Google, ama API-ga YouTube. Kaliya website-yada ayaa la furaa si xogta loo baahanyahay loogala soo dhex baxo, App-kan waxaa lagu isticmaali karaa aaladaha aysa ku jirin Adeegyada Google. Sidoo kale, uma baahnid akoon YouTube ah si aad u isticmaasho NewPipe, kaasoo ah barnaamij bilaash ah.
### Waxqabadka
* Raadi muuqaalo
* Soo bandhiga faahfaahin guud oo muuqaalada ku saabsan
NewPipe wuxuu taageeraa adeegyo badan. [warqadan](https://teamnewpipe.github.io/documentation/) ayaa si faahfaahsan u sharaxaysa sida adeeg cusub loogu soo dari lahaa iyo kala fur-furaha. Fadlan nala soo xidhiidh hadaad rabto inaad mid cusub kusoo darto. Adeegyada aan hadda taageero waxaa kamid ah:
* YouTube
* SoundCloud \[tijaabo\]
* media.ccc.de \[tijaabo\]
* PeerTube instances \[tijaabo\]
* Bandcamp \[tijaabo\]
## Kushubida iyo cusboonaysiinta
Marka koodhka NewPipe isbadal ku dhaco (wax cusub oo lagusoo kordhiyay ama cilad bixin), ugu dambayn waxaa lasii daayaa mid cusub (Siidayn). Siidaynta qaabkeedu waa x.xx.x . Si aad midka cusub u hesho, waxaad samayn kartaa:
1. Inaad mid cusub (APK) adigu dhisato. Tani waa mida ugu dagdag badan eed waxyaabaha cusub ku heli karto, laakiin way adagtahay, sidaa darteed waxaan soojeedinaynaa inaad isticmaasho qababka kale.
2. Ku dar qayb gaar ah xaganaga F-Droid oo xagaas kaga shub isla markay siidayn soobaxdo. Hagitaanka xagan ka eeg: https://newpipe.net/FAQ/tutorials/install-add-fdroid-repo/
<td><a href="https://www.bountysource.com/teams/newpipe"><img src="assets/bountysource_qr_code.png" alt="Visit NewPipe at bountysource.com" width="100px"></a></td>
<td><a href="https://www.bountysource.com/teams/newpipe/issues"><img src="https://img.shields.io/bountysource/team/newpipe/activity.svg?colorB=cd201f" height="30px" alt="Check out how many bounties you can earn."></a></td>
Sidaa darteed, app-ku wax xog ah ma uruuriyo fasaxaaga la'aantii. Siyaasada Sirdhawrka NewPipe ayaa si faahfaahsan u sharaxda waxii xog ah ee la diro markaad cillad wariso, ama aad bogganaga faallo ka dhiibato. Warqada waxaad ka heli kartaa [halkan](https://newpipe.net/legal/privacy/).
NewPipe herhangi bir Google çerçeve kütüphanesini, ya da YouTube API hizmetlerini kullanmaz. Gerekli web hizmetleri yalnızca gerekli bilgileri almak için kaynak olarak kullanılır, bu nedenle bu uygulama Google hizmetleri yüklü olmayan cihazlarda da kullanılabilir. Ayrıca, copyleft özgür yazılımı olan NewPipe'ı kullanmak için bir YouTube hesabına ihtiyacınız yoktur.
### Özellikler
* Video arama
* Videolar hakkında genel bilgileri görüntüleme
* YouTube videoları izleme
* YouTube videolarını dinleme
* Pop-up modu (hareketli oynatıcı)
* Video izlemek için akış oynatıcısını seçme
* Video indirme
* Sadece ses indirme
* Videoyu Kodi'de açma
* Sonraki video/ilgili videolar
* YouTube'u belirli bir dilde arayın
* Yaş sınırlı içeriği izleme/engelleme
* Kanallar hakkındaki genel bilgileri görüntüleme
* Kanal arama
* Bir kanaldaki videoları izleme
* Orbot/Tor desteği (henüz direkt olarak değil)
* 1080p/2K/4K desteği
* Geçmişi görme
* Kanallara abone olma
* Geçmişte arama
* Oynatma listesi arama/oynatma
* Çalma listelerini sıralayıp oynatın
* Videoları sırayla oynatın
* Yerel oynatma listeleri
* Altyazılar
* Canlı yayın desteği
* Yorumları görme
### Desteklenen servisler
NewPipe birden fazla hizmeti destekler. Uygulamaya ve ayıklayıcıya yeni bir hizmet ekleme konusunda daha fazla bilgiye [kılavuzlarımızdan](https://teamnewpipe.github.io/documentation/) ulaşabilirsiniz. Yeni bir hizmet eklemek istiyorsanız lütfen bizimle iletişime geçin. Şu anda desteklenen hizmetler şunlardır:
* YouTube
* SoundCloud \[beta\]
* media.ccc.de \[beta\]
* PeerTube \[beta\]
* Bandcamp \[beta\]
<!-- Eski bağlantıları uyumlu tutmak için gizli span. -->
<span id="updates"></span>
## Kurulum ve güncellemeler
Aşağıdaki yöntemlerden birini kullanarak NewPipe'ı kurabilirsiniz:
1. Özel depomuzu F-Droid'e ekleyin ve oradan yükleyin. Kılavuzu şurada bulabilirsiniz: https://newpipe.net/FAQ/tutorials/install-add-fdroid-repo/
2. APK'yı [Github sürümlerinden](https://github.com/TeamNewPipe/NewPipe/releases) indirin ve kurun.
3. F-Droid ile güncelleyin. Bu, güncellemeleri almanın en yavaş yöntemidir, çünkü F-Droid değişiklikleri tanımalı, APK'yı kendisi oluşturmalı, imzalamalı ve ardından güncellemeyi kullanıcılara dağıtmalıdır.
4. Kendiniz bir APK derleyin. Bu yöntem, cihazınızda yeni özellikler edinmenin en hızlı yoludur, ancak çok daha karmaşıktır, bu nedenle diğer yöntemlerden birini kullanmanızı öneririz.
Çoğu kullanıcı için yöntem 1'i öneririz. Yöntem 1 veya 2 kullanılarak yüklenen APK'lar birbiriyle uyumludur, ancak yöntem 3 kullanılarak yüklenenlerle uyumlu değildir. Bu durum, 1 ve 2 için kullanılan aynı imzalama anahtarıın (bizim anahtarımız) 3 için kullanılan imzalama anahtarından (F-Droid'in anahtarı) farklı olmasından kaynaklanmaktadır. Yöntem 4 kullanılarak oluşturulan deneysel APK'larda anahtar yoktur. İmzalama anahtarları, bir kullanıcının bir uygulamaya kötü amaçlı bir güncelleme yüklemek için kandırılmadığından emin olmanıza yardımcı olur.
Bu arada, herhangi bir nedenle kaynakları değiştirmek istiyorsanız (örneğin, NewPipe'ın temel bir işlevi bozuldu ve F-Droid tarafında henüz bir güncelleme yayınlanmadı), bu prosedürü izlemenizi öneririz:
NewPipe'ı beğendiyseniz, yapacağınız bağışlar bizi motive eder. Bitcoin gönderebilir veya Bountysource veya Liberapay aracılığıyla bağış yapabilirsiniz. NewPipe'a bağış yapma hakkında daha fazla bilgi için lütfen [web sitemizi](https://newpipe.net/donate) ziyaret edin.
<td><a href="https://liberapay.com/TeamNewPipe/"><img src="assets/liberapay_qr_code.png" alt="liberapay.com üzerinde NewPipe'ı ziyaret edin" width="100px"></a></td>
<td><a href="https://liberapay.com/TeamNewPipe/donate"><img src="assets/liberapay_donate_button.svg" alt="Liberapay aracılığıyla bağış yapın" height="35px"></a></td>
<td><a href="https://www.bountysource.com/teams/newpipe"><img src="assets/bountysource_qr_code.png" alt="bountysource.com üzerinde NewPipe'ı ziyaret edin" width="100px"></a></td>
<td><a href="https://www.bountysource.com/teams/newpipe/issues"><img src="https://img.shields.io/bountysource/team/newpipe/activity.svg?colorB=cd201f" height="30px" alt="Ne kadar ödül kazanabileceğinizi kontrol edin."></a></td>
</tr>
</table>
## Gizlilik politikası
NewPipe projesi, çevrimiçi akış hizmetlerini kullanmak için özel, özgür ve anonim bir deneyim sunmayı amaçlamaktadır.
Bu doğrultuda, uygulama sizin izniniz olmadan herhangi bir veri toplamaz. NewPipe'ın Gizlilik Politikası, bir çökme raporu gönderdiğinizde veya blogumuzda yorum yaptığınızda hangi verilerin gönderildiğini ve saklandığını ayrıntılı olarak açıklar. İlgili belgeyi [burada](https://newpipe.net/legal/privacy/) bulabilirsiniz.
"createSql":"CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`uid` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `service_id` INTEGER NOT NULL, `url` TEXT, `name` TEXT, `avatar_url` TEXT, `subscriber_count` INTEGER, `description` TEXT)",
"fields":[
{
"fieldPath":"uid",
"columnName":"uid",
"affinity":"INTEGER",
"notNull":true
},
{
"fieldPath":"serviceId",
"columnName":"service_id",
"affinity":"INTEGER",
"notNull":true
},
{
"fieldPath":"url",
"columnName":"url",
"affinity":"TEXT",
"notNull":false
},
{
"fieldPath":"name",
"columnName":"name",
"affinity":"TEXT",
"notNull":false
},
{
"fieldPath":"avatarUrl",
"columnName":"avatar_url",
"affinity":"TEXT",
"notNull":false
},
{
"fieldPath":"subscriberCount",
"columnName":"subscriber_count",
"affinity":"INTEGER",
"notNull":false
},
{
"fieldPath":"description",
"columnName":"description",
"affinity":"TEXT",
"notNull":false
}
],
"primaryKey":{
"columnNames":[
"uid"
],
"autoGenerate":true
},
"indices":[
{
"name":"index_subscriptions_service_id_url",
"unique":true,
"columnNames":[
"service_id",
"url"
],
"createSql":"CREATE UNIQUE INDEX `index_subscriptions_service_id_url` ON `${TABLE_NAME}` (`service_id`, `url`)"
}
],
"foreignKeys":[]
},
{
"tableName":"search_history",
"createSql":"CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `creation_date` INTEGER, `service_id` INTEGER NOT NULL, `search` TEXT)",
"fields":[
{
"fieldPath":"id",
"columnName":"id",
"affinity":"INTEGER",
"notNull":true
},
{
"fieldPath":"creationDate",
"columnName":"creation_date",
"affinity":"INTEGER",
"notNull":false
},
{
"fieldPath":"serviceId",
"columnName":"service_id",
"affinity":"INTEGER",
"notNull":true
},
{
"fieldPath":"search",
"columnName":"search",
"affinity":"TEXT",
"notNull":false
}
],
"primaryKey":{
"columnNames":[
"id"
],
"autoGenerate":true
},
"indices":[
{
"name":"index_search_history_search",
"unique":false,
"columnNames":[
"search"
],
"createSql":"CREATE INDEX `index_search_history_search` ON `${TABLE_NAME}` (`search`)"
}
],
"foreignKeys":[]
},
{
"tableName":"streams",
"createSql":"CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`uid` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `service_id` INTEGER NOT NULL, `url` TEXT, `title` TEXT, `stream_type` TEXT, `duration` INTEGER, `uploader` TEXT, `thumbnail_url` TEXT)",
"fields":[
{
"fieldPath":"uid",
"columnName":"uid",
"affinity":"INTEGER",
"notNull":true
},
{
"fieldPath":"serviceId",
"columnName":"service_id",
"affinity":"INTEGER",
"notNull":true
},
{
"fieldPath":"url",
"columnName":"url",
"affinity":"TEXT",
"notNull":false
},
{
"fieldPath":"title",
"columnName":"title",
"affinity":"TEXT",
"notNull":false
},
{
"fieldPath":"streamType",
"columnName":"stream_type",
"affinity":"TEXT",
"notNull":false
},
{
"fieldPath":"duration",
"columnName":"duration",
"affinity":"INTEGER",
"notNull":false
},
{
"fieldPath":"uploader",
"columnName":"uploader",
"affinity":"TEXT",
"notNull":false
},
{
"fieldPath":"thumbnailUrl",
"columnName":"thumbnail_url",
"affinity":"TEXT",
"notNull":false
}
],
"primaryKey":{
"columnNames":[
"uid"
],
"autoGenerate":true
},
"indices":[
{
"name":"index_streams_service_id_url",
"unique":true,
"columnNames":[
"service_id",
"url"
],
"createSql":"CREATE UNIQUE INDEX `index_streams_service_id_url` ON `${TABLE_NAME}` (`service_id`, `url`)"
}
],
"foreignKeys":[]
},
{
"tableName":"stream_history",
"createSql":"CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`stream_id` INTEGER NOT NULL, `access_date` INTEGER NOT NULL, `repeat_count` INTEGER NOT NULL, PRIMARY KEY(`stream_id`, `access_date`), FOREIGN KEY(`stream_id`) REFERENCES `streams`(`uid`) ON UPDATE CASCADE ON DELETE CASCADE )",
"fields":[
{
"fieldPath":"streamUid",
"columnName":"stream_id",
"affinity":"INTEGER",
"notNull":true
},
{
"fieldPath":"accessDate",
"columnName":"access_date",
"affinity":"INTEGER",
"notNull":true
},
{
"fieldPath":"repeatCount",
"columnName":"repeat_count",
"affinity":"INTEGER",
"notNull":true
}
],
"primaryKey":{
"columnNames":[
"stream_id",
"access_date"
],
"autoGenerate":false
},
"indices":[
{
"name":"index_stream_history_stream_id",
"unique":false,
"columnNames":[
"stream_id"
],
"createSql":"CREATE INDEX `index_stream_history_stream_id` ON `${TABLE_NAME}` (`stream_id`)"
}
],
"foreignKeys":[
{
"table":"streams",
"onDelete":"CASCADE",
"onUpdate":"CASCADE",
"columns":[
"stream_id"
],
"referencedColumns":[
"uid"
]
}
]
},
{
"tableName":"stream_state",
"createSql":"CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`stream_id` INTEGER NOT NULL, `progress_time` INTEGER NOT NULL, PRIMARY KEY(`stream_id`), FOREIGN KEY(`stream_id`) REFERENCES `streams`(`uid`) ON UPDATE CASCADE ON DELETE CASCADE )",
"fields":[
{
"fieldPath":"streamUid",
"columnName":"stream_id",
"affinity":"INTEGER",
"notNull":true
},
{
"fieldPath":"progressTime",
"columnName":"progress_time",
"affinity":"INTEGER",
"notNull":true
}
],
"primaryKey":{
"columnNames":[
"stream_id"
],
"autoGenerate":false
},
"indices":[],
"foreignKeys":[
{
"table":"streams",
"onDelete":"CASCADE",
"onUpdate":"CASCADE",
"columns":[
"stream_id"
],
"referencedColumns":[
"uid"
]
}
]
},
{
"tableName":"playlists",
"createSql":"CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`uid` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT, `thumbnail_url` TEXT)",
"fields":[
{
"fieldPath":"uid",
"columnName":"uid",
"affinity":"INTEGER",
"notNull":true
},
{
"fieldPath":"name",
"columnName":"name",
"affinity":"TEXT",
"notNull":false
},
{
"fieldPath":"thumbnailUrl",
"columnName":"thumbnail_url",
"affinity":"TEXT",
"notNull":false
}
],
"primaryKey":{
"columnNames":[
"uid"
],
"autoGenerate":true
},
"indices":[
{
"name":"index_playlists_name",
"unique":false,
"columnNames":[
"name"
],
"createSql":"CREATE INDEX `index_playlists_name` ON `${TABLE_NAME}` (`name`)"
}
],
"foreignKeys":[]
},
{
"tableName":"playlist_stream_join",
"createSql":"CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`playlist_id` INTEGER NOT NULL, `stream_id` INTEGER NOT NULL, `join_index` INTEGER NOT NULL, PRIMARY KEY(`playlist_id`, `join_index`), FOREIGN KEY(`playlist_id`) REFERENCES `playlists`(`uid`) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED, FOREIGN KEY(`stream_id`) REFERENCES `streams`(`uid`) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED)",
"createSql":"CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`uid` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `service_id` INTEGER NOT NULL, `url` TEXT, `name` TEXT, `avatar_url` TEXT, `subscriber_count` INTEGER, `description` TEXT)",
"fields":[
{
"fieldPath":"uid",
"columnName":"uid",
"affinity":"INTEGER",
"notNull":true
},
{
"fieldPath":"serviceId",
"columnName":"service_id",
"affinity":"INTEGER",
"notNull":true
},
{
"fieldPath":"url",
"columnName":"url",
"affinity":"TEXT",
"notNull":false
},
{
"fieldPath":"name",
"columnName":"name",
"affinity":"TEXT",
"notNull":false
},
{
"fieldPath":"avatarUrl",
"columnName":"avatar_url",
"affinity":"TEXT",
"notNull":false
},
{
"fieldPath":"subscriberCount",
"columnName":"subscriber_count",
"affinity":"INTEGER",
"notNull":false
},
{
"fieldPath":"description",
"columnName":"description",
"affinity":"TEXT",
"notNull":false
}
],
"primaryKey":{
"columnNames":[
"uid"
],
"autoGenerate":true
},
"indices":[
{
"name":"index_subscriptions_service_id_url",
"unique":true,
"columnNames":[
"service_id",
"url"
],
"createSql":"CREATE UNIQUE INDEX `index_subscriptions_service_id_url` ON `${TABLE_NAME}` (`service_id`, `url`)"
}
],
"foreignKeys":[]
},
{
"tableName":"search_history",
"createSql":"CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `creation_date` INTEGER, `service_id` INTEGER NOT NULL, `search` TEXT)",
"fields":[
{
"fieldPath":"id",
"columnName":"id",
"affinity":"INTEGER",
"notNull":true
},
{
"fieldPath":"creationDate",
"columnName":"creation_date",
"affinity":"INTEGER",
"notNull":false
},
{
"fieldPath":"serviceId",
"columnName":"service_id",
"affinity":"INTEGER",
"notNull":true
},
{
"fieldPath":"search",
"columnName":"search",
"affinity":"TEXT",
"notNull":false
}
],
"primaryKey":{
"columnNames":[
"id"
],
"autoGenerate":true
},
"indices":[
{
"name":"index_search_history_search",
"unique":false,
"columnNames":[
"search"
],
"createSql":"CREATE INDEX `index_search_history_search` ON `${TABLE_NAME}` (`search`)"
}
],
"foreignKeys":[]
},
{
"tableName":"streams",
"createSql":"CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`uid` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `service_id` INTEGER NOT NULL, `url` TEXT NOT NULL, `title` TEXT NOT NULL, `stream_type` TEXT NOT NULL, `duration` INTEGER NOT NULL, `uploader` TEXT NOT NULL, `thumbnail_url` TEXT, `view_count` INTEGER, `textual_upload_date` TEXT, `upload_date` INTEGER, `is_upload_date_approximation` INTEGER)",
"fields":[
{
"fieldPath":"uid",
"columnName":"uid",
"affinity":"INTEGER",
"notNull":true
},
{
"fieldPath":"serviceId",
"columnName":"service_id",
"affinity":"INTEGER",
"notNull":true
},
{
"fieldPath":"url",
"columnName":"url",
"affinity":"TEXT",
"notNull":true
},
{
"fieldPath":"title",
"columnName":"title",
"affinity":"TEXT",
"notNull":true
},
{
"fieldPath":"streamType",
"columnName":"stream_type",
"affinity":"TEXT",
"notNull":true
},
{
"fieldPath":"duration",
"columnName":"duration",
"affinity":"INTEGER",
"notNull":true
},
{
"fieldPath":"uploader",
"columnName":"uploader",
"affinity":"TEXT",
"notNull":true
},
{
"fieldPath":"thumbnailUrl",
"columnName":"thumbnail_url",
"affinity":"TEXT",
"notNull":false
},
{
"fieldPath":"viewCount",
"columnName":"view_count",
"affinity":"INTEGER",
"notNull":false
},
{
"fieldPath":"textualUploadDate",
"columnName":"textual_upload_date",
"affinity":"TEXT",
"notNull":false
},
{
"fieldPath":"uploadDate",
"columnName":"upload_date",
"affinity":"INTEGER",
"notNull":false
},
{
"fieldPath":"isUploadDateApproximation",
"columnName":"is_upload_date_approximation",
"affinity":"INTEGER",
"notNull":false
}
],
"primaryKey":{
"columnNames":[
"uid"
],
"autoGenerate":true
},
"indices":[
{
"name":"index_streams_service_id_url",
"unique":true,
"columnNames":[
"service_id",
"url"
],
"createSql":"CREATE UNIQUE INDEX `index_streams_service_id_url` ON `${TABLE_NAME}` (`service_id`, `url`)"
}
],
"foreignKeys":[]
},
{
"tableName":"stream_history",
"createSql":"CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`stream_id` INTEGER NOT NULL, `access_date` INTEGER NOT NULL, `repeat_count` INTEGER NOT NULL, PRIMARY KEY(`stream_id`, `access_date`), FOREIGN KEY(`stream_id`) REFERENCES `streams`(`uid`) ON UPDATE CASCADE ON DELETE CASCADE )",
"fields":[
{
"fieldPath":"streamUid",
"columnName":"stream_id",
"affinity":"INTEGER",
"notNull":true
},
{
"fieldPath":"accessDate",
"columnName":"access_date",
"affinity":"INTEGER",
"notNull":true
},
{
"fieldPath":"repeatCount",
"columnName":"repeat_count",
"affinity":"INTEGER",
"notNull":true
}
],
"primaryKey":{
"columnNames":[
"stream_id",
"access_date"
],
"autoGenerate":false
},
"indices":[
{
"name":"index_stream_history_stream_id",
"unique":false,
"columnNames":[
"stream_id"
],
"createSql":"CREATE INDEX `index_stream_history_stream_id` ON `${TABLE_NAME}` (`stream_id`)"
}
],
"foreignKeys":[
{
"table":"streams",
"onDelete":"CASCADE",
"onUpdate":"CASCADE",
"columns":[
"stream_id"
],
"referencedColumns":[
"uid"
]
}
]
},
{
"tableName":"stream_state",
"createSql":"CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`stream_id` INTEGER NOT NULL, `progress_time` INTEGER NOT NULL, PRIMARY KEY(`stream_id`), FOREIGN KEY(`stream_id`) REFERENCES `streams`(`uid`) ON UPDATE CASCADE ON DELETE CASCADE )",
"fields":[
{
"fieldPath":"streamUid",
"columnName":"stream_id",
"affinity":"INTEGER",
"notNull":true
},
{
"fieldPath":"progressTime",
"columnName":"progress_time",
"affinity":"INTEGER",
"notNull":true
}
],
"primaryKey":{
"columnNames":[
"stream_id"
],
"autoGenerate":false
},
"indices":[],
"foreignKeys":[
{
"table":"streams",
"onDelete":"CASCADE",
"onUpdate":"CASCADE",
"columns":[
"stream_id"
],
"referencedColumns":[
"uid"
]
}
]
},
{
"tableName":"playlists",
"createSql":"CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`uid` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT, `thumbnail_url` TEXT)",
"fields":[
{
"fieldPath":"uid",
"columnName":"uid",
"affinity":"INTEGER",
"notNull":true
},
{
"fieldPath":"name",
"columnName":"name",
"affinity":"TEXT",
"notNull":false
},
{
"fieldPath":"thumbnailUrl",
"columnName":"thumbnail_url",
"affinity":"TEXT",
"notNull":false
}
],
"primaryKey":{
"columnNames":[
"uid"
],
"autoGenerate":true
},
"indices":[
{
"name":"index_playlists_name",
"unique":false,
"columnNames":[
"name"
],
"createSql":"CREATE INDEX `index_playlists_name` ON `${TABLE_NAME}` (`name`)"
}
],
"foreignKeys":[]
},
{
"tableName":"playlist_stream_join",
"createSql":"CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`playlist_id` INTEGER NOT NULL, `stream_id` INTEGER NOT NULL, `join_index` INTEGER NOT NULL, PRIMARY KEY(`playlist_id`, `join_index`), FOREIGN KEY(`playlist_id`) REFERENCES `playlists`(`uid`) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED, FOREIGN KEY(`stream_id`) REFERENCES `streams`(`uid`) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED)",
"createSql":"CREATE UNIQUE INDEX `index_playlist_stream_join_playlist_id_join_index` ON `${TABLE_NAME}` (`playlist_id`, `join_index`)"
},
{
"name":"index_playlist_stream_join_stream_id",
"unique":false,
"columnNames":[
"stream_id"
],
"createSql":"CREATE INDEX `index_playlist_stream_join_stream_id` ON `${TABLE_NAME}` (`stream_id`)"
}
],
"foreignKeys":[
{
"table":"playlists",
"onDelete":"CASCADE",
"onUpdate":"CASCADE",
"columns":[
"playlist_id"
],
"referencedColumns":[
"uid"
]
},
{
"table":"streams",
"onDelete":"CASCADE",
"onUpdate":"CASCADE",
"columns":[
"stream_id"
],
"referencedColumns":[
"uid"
]
}
]
},
{
"tableName":"remote_playlists",
"createSql":"CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`uid` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `service_id` INTEGER NOT NULL, `name` TEXT, `url` TEXT, `thumbnail_url` TEXT, `uploader` TEXT, `stream_count` INTEGER)",
"fields":[
{
"fieldPath":"uid",
"columnName":"uid",
"affinity":"INTEGER",
"notNull":true
},
{
"fieldPath":"serviceId",
"columnName":"service_id",
"affinity":"INTEGER",
"notNull":true
},
{
"fieldPath":"name",
"columnName":"name",
"affinity":"TEXT",
"notNull":false
},
{
"fieldPath":"url",
"columnName":"url",
"affinity":"TEXT",
"notNull":false
},
{
"fieldPath":"thumbnailUrl",
"columnName":"thumbnail_url",
"affinity":"TEXT",
"notNull":false
},
{
"fieldPath":"uploader",
"columnName":"uploader",
"affinity":"TEXT",
"notNull":false
},
{
"fieldPath":"streamCount",
"columnName":"stream_count",
"affinity":"INTEGER",
"notNull":false
}
],
"primaryKey":{
"columnNames":[
"uid"
],
"autoGenerate":true
},
"indices":[
{
"name":"index_remote_playlists_name",
"unique":false,
"columnNames":[
"name"
],
"createSql":"CREATE INDEX `index_remote_playlists_name` ON `${TABLE_NAME}` (`name`)"
},
{
"name":"index_remote_playlists_service_id_url",
"unique":true,
"columnNames":[
"service_id",
"url"
],
"createSql":"CREATE UNIQUE INDEX `index_remote_playlists_service_id_url` ON `${TABLE_NAME}` (`service_id`, `url`)"
}
],
"foreignKeys":[]
},
{
"tableName":"feed",
"createSql":"CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`stream_id` INTEGER NOT NULL, `subscription_id` INTEGER NOT NULL, PRIMARY KEY(`stream_id`, `subscription_id`), FOREIGN KEY(`stream_id`) REFERENCES `streams`(`uid`) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED, FOREIGN KEY(`subscription_id`) REFERENCES `subscriptions`(`uid`) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED)",
"fields":[
{
"fieldPath":"streamId",
"columnName":"stream_id",
"affinity":"INTEGER",
"notNull":true
},
{
"fieldPath":"subscriptionId",
"columnName":"subscription_id",
"affinity":"INTEGER",
"notNull":true
}
],
"primaryKey":{
"columnNames":[
"stream_id",
"subscription_id"
],
"autoGenerate":false
},
"indices":[
{
"name":"index_feed_subscription_id",
"unique":false,
"columnNames":[
"subscription_id"
],
"createSql":"CREATE INDEX `index_feed_subscription_id` ON `${TABLE_NAME}` (`subscription_id`)"
}
],
"foreignKeys":[
{
"table":"streams",
"onDelete":"CASCADE",
"onUpdate":"CASCADE",
"columns":[
"stream_id"
],
"referencedColumns":[
"uid"
]
},
{
"table":"subscriptions",
"onDelete":"CASCADE",
"onUpdate":"CASCADE",
"columns":[
"subscription_id"
],
"referencedColumns":[
"uid"
]
}
]
},
{
"tableName":"feed_group",
"createSql":"CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`uid` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT NOT NULL, `icon_id` INTEGER NOT NULL, `sort_order` INTEGER NOT NULL)",
"fields":[
{
"fieldPath":"uid",
"columnName":"uid",
"affinity":"INTEGER",
"notNull":true
},
{
"fieldPath":"name",
"columnName":"name",
"affinity":"TEXT",
"notNull":true
},
{
"fieldPath":"icon",
"columnName":"icon_id",
"affinity":"INTEGER",
"notNull":true
},
{
"fieldPath":"sortOrder",
"columnName":"sort_order",
"affinity":"INTEGER",
"notNull":true
}
],
"primaryKey":{
"columnNames":[
"uid"
],
"autoGenerate":true
},
"indices":[
{
"name":"index_feed_group_sort_order",
"unique":false,
"columnNames":[
"sort_order"
],
"createSql":"CREATE INDEX `index_feed_group_sort_order` ON `${TABLE_NAME}` (`sort_order`)"
}
],
"foreignKeys":[]
},
{
"tableName":"feed_group_subscription_join",
"createSql":"CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`group_id` INTEGER NOT NULL, `subscription_id` INTEGER NOT NULL, PRIMARY KEY(`group_id`, `subscription_id`), FOREIGN KEY(`group_id`) REFERENCES `feed_group`(`uid`) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED, FOREIGN KEY(`subscription_id`) REFERENCES `subscriptions`(`uid`) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED)",
* Unfortunately these queries must be hardcoded due to the possibility of
* schema and names changing at a later date, thus invalidating the older migration
* scripts if they are not hardcoded.
* */
* Unfortunately these queries must be hardcoded due to the possibility of
* schema and names changing at a later date, thus invalidating the older migration
* scripts if they are not hardcoded.
* */
// Not much we can do about this, since room doesn't create tables before migration.
// It's either this or blasting the entire database anew.
database.execSQL("CREATE INDEX `index_search_history_search` ON `search_history` (`search`)");
database.execSQL("CREATE TABLE IF NOT EXISTS `streams` (`uid` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `service_id` INTEGER NOT NULL, `url` TEXT, `title` TEXT, `stream_type` TEXT, `duration` INTEGER, `uploader` TEXT, `thumbnail_url` TEXT)");
database.execSQL("CREATE UNIQUE INDEX `index_streams_service_id_url` ON `streams` (`service_id`, `url`)");
database.execSQL("CREATE TABLE IF NOT EXISTS `stream_history` (`stream_id` INTEGER NOT NULL, `access_date` INTEGER NOT NULL, `repeat_count` INTEGER NOT NULL, PRIMARY KEY(`stream_id`, `access_date`), FOREIGN KEY(`stream_id`) REFERENCES `streams`(`uid`) ON UPDATE CASCADE ON DELETE CASCADE )");
database.execSQL("CREATE INDEX `index_stream_history_stream_id` ON `stream_history` (`stream_id`)");
database.execSQL("CREATE TABLE IF NOT EXISTS `stream_state` (`stream_id` INTEGER NOT NULL, `progress_time` INTEGER NOT NULL, PRIMARY KEY(`stream_id`), FOREIGN KEY(`stream_id`) REFERENCES `streams`(`uid`) ON UPDATE CASCADE ON DELETE CASCADE )");
database.execSQL("CREATE TABLE IF NOT EXISTS `playlists` (`uid` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT, `thumbnail_url` TEXT)");
database.execSQL("CREATE INDEX `index_search_history_search` "
+"ON `search_history` (`search`)");
database.execSQL("CREATE TABLE IF NOT EXISTS `streams` "
+"(`uid` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "
+"`service_id` INTEGER NOT NULL, `url` TEXT, `title` TEXT, "
thrownewIllegalStateException("Invalid subscription id (-1)");
}
update(entity);
}
returnentities;
}
}
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.