This is, again, a consequence of the commit "Drop some assumptions on how PlayerService is started and reused".
This commit notified VideoDetailFragment of player starting and stopping independently of the player.
Read the comments in the code changes for more information.
This bug started appearing because the way to close the player is now unified in PlayerHolder.stopService(), which causes the player to reach back to the video detail fragment with a notification of the shutdown (i.e. onServiceStopped() is called). This is fixed by adding a nullability check on the binding.
Fixes mini-player not appearing on app start if the player service is already playing something.
The PlayerService (and the player) may be started from an external intent that does not involve the MainActivity (e.g. RouterActivity or Android Auto's media browser interface).
This PR tries to bind to the PlayerService as soon as the MainActivity starts, but only does so in a passive way, i.e. if the service is not already running it is not started.
Once the connection between PlayerHolder and PlayerService is setup, the ACTION_PLAYER_STARTED broadcast is sent to MainActivity so that it can setup the bottom mini-player.
Another important thing this commit does is to check whether the player is open before actually adding the mini-player view, since the PlayerService could be bound even without a running player (e.g. Android Auto's media browser is being used). This is a consequence of commit "Drop some assumptions on how PlayerService is started and reused".
This commit is a consequence of the commit "Drop some assumptions on how PlayerService is started and reused". Since the assumptions on how the PlayerService is started and reused have changed, we also need to adapt the way it is stopped. This means allowing the service to remain alive even after the player is destroyed, in case the system is still accessing PlayerService e.g. through the media browser interface. The foreground service needs to be stopped and the notification removed in any case.
If a playbackPreparer is set, then instead of calling `player.prepare()`, the MediaSessionConnector will call `playbackPreparer.onPrepare(true)` instead, as seen below.
This commit makes it so that playbackPreparer.onPrepare(true) restores the original behavior of just calling player.prepare().
From MediaSessionConnector -> MediaSessionCompat.Callback implementation:
```java
@Override
public void onPlay() {
if (canDispatchPlaybackAction(PlaybackStateCompat.ACTION_PLAY)) {
if (player.getPlaybackState() == Player.STATE_IDLE) {
if (playbackPreparer != null) {
playbackPreparer.onPrepare(/* playWhenReady= */ true);
} else {
player.prepare();
}
} else if (player.getPlaybackState() == Player.STATE_ENDED) {
seekTo(player, player.getCurrentMediaItemIndex(), C.TIME_UNSET);
}
Assertions.checkNotNull(player).play();
}
}
```
This class implements the media browser service interface as a standalone class for clearer separation of concerns (otherwise everything would need to go in PlayerService, since PlayerService overrides MediaBrowserServiceCompat)
Co-authored-by: Haggai Eran <haggai.eran@gmail.com>
Co-authored-by: Profpatsch <mail@profpatsch.de>
This class will receive the media URLs generated by [MediaBrowserImpl] and will start playback of the corresponding streams or playlists.
Co-authored-by: Haggai Eran <haggai.eran@gmail.com>
Co-authored-by: Profpatsch <mail@profpatsch.de>
This changes significantly how the MediaSessionCompat and MediaSessionConnector objects are used:
- now they are tied to the service and not to the player, and so they might be reused with multiple players (which should be allowed)
- now they can exist even if there is no player (which is fundamental to be able to answer media browser queries)
Some old Android devices have a broken WebView implementation, that can't execute the poToken code. This is now detected and the getWebClientPoToken return null instead of throwing an error in such a case, to allow the extractor to try to extract the video data even without a poToken.
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Estonian)
Currently translated at 13.2% (11 of 83 strings)
Translated using Weblate (Latin)
Currently translated at 8.6% (64 of 740 strings)
Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Azerbaijani)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Hungarian)
Currently translated at 100.0% (83 of 83 strings)
Translated using Weblate (Turkish)
Currently translated at 48.1% (40 of 83 strings)
Translated using Weblate (Icelandic)
Currently translated at 99.4% (736 of 740 strings)
Translated using Weblate (Portuguese (Portugal))
Currently translated at 96.3% (80 of 83 strings)
Translated using Weblate (Swedish)
Currently translated at 100.0% (83 of 83 strings)
Translated using Weblate (Swedish)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Vietnamese)
Currently translated at 78.3% (65 of 83 strings)
Translated using Weblate (Slovak)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Bulgarian)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (German)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (German)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Belarusian)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Belarusian)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (German)
Currently translated at 100.0% (83 of 83 strings)
Translated using Weblate (German)
Currently translated at 100.0% (83 of 83 strings)
Translated using Weblate (German)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Azerbaijani)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Portuguese)
Currently translated at 100.0% (83 of 83 strings)
Translated using Weblate (Greek)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Polish)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Indonesian)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (German)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Icelandic)
Currently translated at 99.4% (736 of 740 strings)
Translated using Weblate (Arabic)
Currently translated at 100.0% (83 of 83 strings)
Translated using Weblate (Estonian)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Arabic)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Ukrainian)
Currently translated at 99.8% (739 of 740 strings)
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Hungarian)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (ryu (generated) (ryu))
Currently translated at 99.4% (736 of 740 strings)
Translated using Weblate (N’Ko)
Currently translated at 89.4% (662 of 740 strings)
Translated using Weblate (Norwegian Nynorsk)
Currently translated at 19.8% (147 of 740 strings)
Translated using Weblate (Georgian)
Currently translated at 89.1% (660 of 740 strings)
Translated using Weblate (Icelandic)
Currently translated at 99.0% (733 of 740 strings)
Translated using Weblate (Kurdish (Northern))
Currently translated at 65.4% (484 of 740 strings)
Translated using Weblate (Somali)
Currently translated at 75.1% (556 of 740 strings)
Translated using Weblate (Uzbek (Latin script))
Currently translated at 62.0% (459 of 740 strings)
Translated using Weblate (English (United Kingdom))
Currently translated at 7.4% (55 of 740 strings)
Translated using Weblate (Odia)
Currently translated at 99.4% (736 of 740 strings)
Translated using Weblate (Santali)
Currently translated at 14.5% (108 of 740 strings)
Translated using Weblate (Bengali)
Currently translated at 76.7% (568 of 740 strings)
Translated using Weblate (Sardinian)
Currently translated at 99.5% (737 of 740 strings)
Translated using Weblate (Bengali (India))
Currently translated at 40.1% (297 of 740 strings)
Translated using Weblate (Kurdish (Central))
Currently translated at 84.0% (622 of 740 strings)
Translated using Weblate (Arabic (Libya))
Currently translated at 97.7% (723 of 740 strings)
Translated using Weblate (Malayalam)
Currently translated at 76.4% (566 of 740 strings)
Translated using Weblate (Interlingua)
Currently translated at 32.2% (239 of 740 strings)
Translated using Weblate (Filipino)
Currently translated at 31.3% (232 of 740 strings)
Translated using Weblate (Thai)
Currently translated at 30.0% (222 of 740 strings)
Translated using Weblate (Nepali)
Currently translated at 59.0% (437 of 740 strings)
Translated using Weblate (Danish)
Currently translated at 99.8% (739 of 740 strings)
Translated using Weblate (Galician)
Currently translated at 99.5% (737 of 740 strings)
Translated using Weblate (Malay)
Currently translated at 57.9% (429 of 740 strings)
Translated using Weblate (Belarusian)
Currently translated at 99.5% (737 of 740 strings)
Translated using Weblate (Norwegian Bokmål)
Currently translated at 94.0% (696 of 740 strings)
Translated using Weblate (Estonian)
Currently translated at 99.7% (738 of 740 strings)
Translated using Weblate (Punjabi)
Currently translated at 99.5% (737 of 740 strings)
Translated using Weblate (Albanian)
Currently translated at 79.8% (591 of 740 strings)
Translated using Weblate (Dutch (Belgium))
Currently translated at 75.1% (556 of 740 strings)
Translated using Weblate (Urdu)
Currently translated at 68.2% (505 of 740 strings)
Translated using Weblate (Azerbaijani)
Currently translated at 99.5% (737 of 740 strings)
Translated using Weblate (Catalan)
Currently translated at 87.0% (644 of 740 strings)
Translated using Weblate (Kurdish)
Currently translated at 63.7% (472 of 740 strings)
Translated using Weblate (Bulgarian)
Currently translated at 99.7% (738 of 740 strings)
Translated using Weblate (Telugu)
Currently translated at 58.1% (430 of 740 strings)
Translated using Weblate (Hindi)
Currently translated at 99.5% (737 of 740 strings)
Translated using Weblate (Finnish)
Currently translated at 97.9% (725 of 740 strings)
Translated using Weblate (Croatian)
Currently translated at 98.9% (732 of 740 strings)
Translated using Weblate (Vietnamese)
Currently translated at 99.5% (737 of 740 strings)
Translated using Weblate (Lithuanian)
Currently translated at 99.4% (736 of 740 strings)
Translated using Weblate (Swedish)
Currently translated at 99.8% (739 of 740 strings)
Translated using Weblate (Hebrew)
Currently translated at 99.4% (736 of 740 strings)
Translated using Weblate (Bengali (Bangladesh))
Currently translated at 54.3% (402 of 740 strings)
Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 99.5% (737 of 740 strings)
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 99.7% (738 of 740 strings)
Translated using Weblate (Portuguese (Brazil))
Currently translated at 99.7% (738 of 740 strings)
Translated using Weblate (Asturian)
Currently translated at 63.3% (469 of 740 strings)
Translated using Weblate (Persian)
Currently translated at 92.4% (684 of 740 strings)
Translated using Weblate (Polish)
Currently translated at 99.5% (737 of 740 strings)
Translated using Weblate (Turkish)
Currently translated at 99.5% (737 of 740 strings)
Translated using Weblate (Ukrainian)
Currently translated at 99.5% (737 of 740 strings)
Translated using Weblate (Indonesian)
Currently translated at 99.7% (738 of 740 strings)
Translated using Weblate (Arabic)
Currently translated at 99.7% (738 of 740 strings)
Translated using Weblate (Czech)
Currently translated at 99.5% (737 of 740 strings)
Translated using Weblate (Esperanto)
Currently translated at 71.4% (529 of 740 strings)
Translated using Weblate (Slovak)
Currently translated at 99.8% (739 of 740 strings)
Translated using Weblate (Romanian)
Currently translated at 99.8% (739 of 740 strings)
Translated using Weblate (Chinese (Traditional Han script, Hong Kong))
Currently translated at 99.3% (735 of 740 strings)
Translated using Weblate (Basque)
Currently translated at 99.8% (739 of 740 strings)
Translated using Weblate (Italian)
Currently translated at 99.7% (738 of 740 strings)
Translated using Weblate (Korean)
Currently translated at 99.4% (736 of 740 strings)
Translated using Weblate (Japanese)
Currently translated at 99.4% (736 of 740 strings)
Translated using Weblate (Russian)
Currently translated at 99.5% (737 of 740 strings)
Translated using Weblate (Serbian)
Currently translated at 99.5% (737 of 740 strings)
Translated using Weblate (Dutch)
Currently translated at 99.5% (737 of 740 strings)
Translated using Weblate (Hungarian)
Currently translated at 99.5% (737 of 740 strings)
Translated using Weblate (Spanish)
Currently translated at 99.7% (738 of 740 strings)
Translated using Weblate (German)
Currently translated at 99.5% (737 of 740 strings)
Translated using Weblate (Spanish)
Currently translated at 100.0% (82 of 82 strings)
Translated using Weblate (Greek)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Portuguese (Portugal))
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Portuguese)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Tamil)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Tamil)
Currently translated at 100.0% (82 of 82 strings)
Translated using Weblate (Tamil)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (French)
Currently translated at 100.0% (82 of 82 strings)
Translated using Weblate (Belarusian)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Turkish)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (German)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Macedonian)
Currently translated at 6.0% (5 of 82 strings)
Translated using Weblate (Macedonian)
Currently translated at 80.6% (597 of 740 strings)
Translated using Weblate (French)
Currently translated at 100.0% (82 of 82 strings)
Translated using Weblate (French)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Belarusian)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Swedish)
Currently translated at 100.0% (82 of 82 strings)
Translated using Weblate (Belarusian)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Swedish)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Romanian)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (French)
Currently translated at 100.0% (82 of 82 strings)
Translated using Weblate (Hungarian)
Currently translated at 100.0% (82 of 82 strings)
Translated using Weblate (Belarusian)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Esperanto)
Currently translated at 71.7% (531 of 740 strings)
Translated using Weblate (Spanish)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Kabyle)
Currently translated at 28.7% (213 of 740 strings)
Translated using Weblate (Estonian)
Currently translated at 12.1% (10 of 82 strings)
Translated using Weblate (Estonian)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Gujarati)
Currently translated at 11.0% (82 of 740 strings)
Translated using Weblate (Azerbaijani)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Estonian)
Currently translated at 10.9% (9 of 82 strings)
Translated using Weblate (Danish)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Serbian)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Arabic)
Currently translated at 100.0% (82 of 82 strings)
Translated using Weblate (Arabic)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (French)
Currently translated at 98.7% (81 of 82 strings)
Translated using Weblate (Estonian)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (French)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Undetermined)
Currently translated at 2.4% (2 of 82 strings)
Translated using Weblate (Hungarian)
Currently translated at 100.0% (82 of 82 strings)
Translated using Weblate (Chinese (Traditional Han script, Hong Kong))
Currently translated at 28.0% (23 of 82 strings)
Translated using Weblate (Slovak)
Currently translated at 100.0% (82 of 82 strings)
Translated using Weblate (Dutch)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Gujarati)
Currently translated at 9.4% (70 of 740 strings)
Translated using Weblate (Estonian)
Currently translated at 9.7% (8 of 82 strings)
Translated using Weblate (Spanish)
Currently translated at 100.0% (82 of 82 strings)
Translated using Weblate (Indonesian)
Currently translated at 100.0% (82 of 82 strings)
Translated using Weblate (Italian)
Currently translated at 100.0% (82 of 82 strings)
Translated using Weblate (Hungarian)
Currently translated at 74.3% (61 of 82 strings)
Translated using Weblate (Russian)
Currently translated at 98.7% (81 of 82 strings)
Translated using Weblate (Estonian)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Italian)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Italian)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Russian)
Currently translated at 100.0% (740 of 740 strings)
Translated using Weblate (Hungarian)
Currently translated at 64.6% (53 of 82 strings)
Translated using Weblate (Czech)
Currently translated at 100.0% (82 of 82 strings)
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (82 of 82 strings)
Translated using Weblate (Russian)
Currently translated at 97.5% (80 of 82 strings)
Translated using Weblate (German)
Currently translated at 100.0% (82 of 82 strings)
Translated using Weblate (Bulgarian)
Currently translated at 100.0% (740 of 740 strings)
Co-authored-by: Agnieszka C <aga_04@o2.pl>
Co-authored-by: Alex25820 <alexs25820@gmail.com>
Co-authored-by: Andrey F <firsan777@mail.ru>
Co-authored-by: Anonymous <noreply@weblate.org>
Co-authored-by: Anthony Romero <dagazcii@gmail.com>
Co-authored-by: ButterflyOfFire <boffire@users.noreply.hosted.weblate.org>
Co-authored-by: Bảo Nam (Namm) <namb20994@gmail.com>
Co-authored-by: C. Rüdinger <Mail-an-CR@web.de>
Co-authored-by: Ding User <dengus@users.noreply.hosted.weblate.org>
Co-authored-by: Emin Tufan Çetin <etcetin@gmail.com>
Co-authored-by: Femini <nizamismidov4@gmail.com>
Co-authored-by: Fjuro <fjuro@alius.cz>
Co-authored-by: GeoCup <geokapaniaris@gmail.com>
Co-authored-by: Ghost of Sparta <makesocialfoss32@keemail.me>
Co-authored-by: H Tamás <hovanszki@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Igor Sorocean <sorocean.igor@gmail.com>
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Co-authored-by: Jaidyn Ann <jadedctrl@posteo.net>
Co-authored-by: Linerly <linerly@proton.me>
Co-authored-by: Massimo Pissarello <mapi68@gmail.com>
Co-authored-by: MatthieuPh <matthieu.philippe@protonmail.com>
Co-authored-by: Mickaël Binos <mickaelbinos@outlook.com>
Co-authored-by: Miguel <mp0187595@tutamail.com>
Co-authored-by: Milan <mobrcian@hotmail.com>
Co-authored-by: NEXI <nexiphotographer@gmail.com>
Co-authored-by: Nicolas SALMIERI <1salmieri.nicolas@gmail.com>
Co-authored-by: NormalRandomPeople <normal.scribe833@silomails.com>
Co-authored-by: Philip Goto <philip.goto@gmail.com>
Co-authored-by: Priit Jõerüüt <hwlate@joeruut.com>
Co-authored-by: Random <random-r@users.noreply.hosted.weblate.org>
Co-authored-by: Rex_sa <rex.sa@pm.me>
Co-authored-by: Rijolo <rijolo4790@gholar.com>
Co-authored-by: Sveinn í Felli <sv1@fellsnet.is>
Co-authored-by: Szia Tomi <sziatomi01@gmail.com>
Co-authored-by: TobiGr <TobiGr@users.noreply.github.com>
Co-authored-by: VfBFan <VfBFan@users.noreply.hosted.weblate.org>
Co-authored-by: VfBFan <drop0815@posteo.de>
Co-authored-by: VisionR1 <25982450+VisionR1@users.noreply.github.com>
Co-authored-by: Vtrytobe <vtrytobe@gmail.com>
Co-authored-by: cat <catsnote@proton.me>
Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Co-authored-by: gfbdrgng <hnaofegnp@hldrive.com>
Co-authored-by: hajayad577 <hajayad577@numerobo.com>
Co-authored-by: jpkaster 77 <jpkaster81@gmail.com>
Co-authored-by: polarwood <wreckfitzgerald@proton.me>
Co-authored-by: ssantos <ssantos@web.de>
Co-authored-by: trunars <trunars@gmail.com>
Co-authored-by: yummysheepouo <jerry88182821@gmail.com>
Co-authored-by: zmni <zmni@outlook.com>
Co-authored-by: Валентин Барсуков <valikbars04@gmail.com>
Co-authored-by: Максим Горпиніч <maksimgorpinic2005a@gmail.com>
Co-authored-by: Максим Горпиніч <mgorpinic2005@gmail.com>
Co-authored-by: મેબીરાજ <rajbhatelia@gmail.com>
Co-authored-by: રાજ ભાતેલીઆ <rajbhatelia@gmail.com>
Co-authored-by: தமிழ்நேரம் <anishprabu.t@gmail.com>
Co-authored-by: 大王叫我来巡山 <hamburger2048@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/ar/
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/cs/
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/de/
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/es/
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/et/
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/fr/
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/hu/
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/id/
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/it/
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/mk/
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/pt/
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/pt_PT/
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/ru/
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/sk/
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/sv/
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/ta/
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/tr/
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/uk/
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/und/
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/vi/
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/zh_Hant_HK/
Translation: NewPipe/Metadata
This prevents non-abilities to fetch BotGuard challenge and send its
result with the jnn-pa.googleapis.com domain (domain block like done
on Pi-hole lists or DNS servers).
That's what the official website uses to send the challenge execution
result, however it uses InnerTube to fetch the challenge. Embeds
still use the jnn-pa.googleapis.com domain.
Also rename the makeJnnPaGoogleapisRequest method appropriately.
The headers should be overwritten in the same way, based on how
`.header` is the same as `.removeHeader().addHeader()`.
We weren’t closing the request resources after using them, potentially
leaking file handles. This will add autoclosing for both the request
and the body objects.