Oh wow, would you look at the time! Happy new year from the NewPipe team! We are “starting 2022 off” with some great additions: YouTube-like rewind/fast-forward, pinned comments, and searchable preferences!
Apart from these, we have a bucket-load of fixes and improvements that will hopefully make your NewPipe experience better than ever.
This blog post is dedicated to the master meister @litetex. Read on and it will be quite evident why.
Thanks to the work of @dkramer95, you can now enjoy a nice pin icon next to a pinned comment below a video. Thank you for this very nice first contribution to our app, we look forward to more!
- The big change for this release will be very obvious to you the moment you double tap to seek on a video. We now have YouTube-like rewind and fast-forward behaviour! Apart from the cool visuals, what this means is that you don’t have to keep double-tapping furiously to execute every single jump in time. Instead, you initiate the action with a double tap, and then every single tap after that executes another jump in time. This ‘single tap window’ lasts until the animation finishes, after which you have to double tap to initiate another one. This huge quality-of-life improvement to seeking was brought to you by @vkay94. The PR was kept up to date by @Stypox, and then finally pushed across the finish line by @litetex. Thanks to everyone involved in this major effort!
- Yet another major change, thanks to @litetex, is that the app settings are now searchable! And it’s not just any old search, it’s fuzzy search! That means it’s really cute and cuddly. No really. It’s an ISO standard and everything. Oh, and it also means you don’t need to type in the exact letters for a particular option. Close enough words also show you the correct results.
- Also, the
Clear reCAPTCHA cookiesoption was moved from
History and cache, and changed to being greyed out by default instead of being hidden by default, so that it can be shown in the search results.
- Also, the
Are you tired of the toast notifications telling you that some sort of player error occurred, but having no idea what happened, or how to report that error? Well, in addition to the error report page and the error snackbar at the bottom, now NewPipe has a third way to show errors: it generates a silent system notification. You just need to tap on it to report the error to us, all thanks to @Stypox, who also took the opportunity to restructure and improve the rest of the error-reporting-related code.
@litetex implemented another improvement to error handling: If the app tried to open a file manager, but no SAF-compatible file manager was found, NewPipe just crashed. Now it tells you what went wrong and how to fix it.
Based on feedback from an accessibility-enabled user, @litetex stopped screen readers from telling you over and over and over again that there is a “Video preview thumbnail” when scrolling through lists.
We’ve got another improvement for people with slow Internet or those facing a period of poor connection. The player used to “close with an error” (read: crash) if it took too long to buffer during a livestream. This happened because it just fell too far behind the edge of the livestream. To fix and improve this, @TiA4f8R implemented a two-fold change. The first was to increase the time period before the player is considered to have ‘fallen too far behind’, and if that still happens, the second was to simply drop the current play time and jump ahead to the edge of the livestream, skipping the un-buffered section entirely. No more player crashes! Never! Right guys? Right.
As the first entry in our big series of fixes this release, a nasty bug a lot of our users faced was that switching from one player type to another caused the playback to restart from the beginning. This has been fixed by @litetex.
@Stypox fixed the order of local search results from your search history, so now they are back to being ordered by creation date instead of alphabetical order (which made it seem like new entries weren’t being added to the search result history database, unless you searched for a video titled “AAAA” or something).
When a video link was opened with a timestamp URL parameter that had more than 3 digits, NewPipe ignored the 4th and higher digits. This meant that the app took you to the wrong timestamp. For example, 1001 seconds (16 minutes and 41 seconds) would be parsed as 1 second instead. @mhmdanas has fixed this.
@Stypox fixed many different crashes where the code expected the player’s queue to be
not null, but where it was, you guessed it,
@Cheechaii introduced #respect into the app. Now the player respects display cutouts (like notches) when playing in multi-window mode, whereas previously, black bars were shown.
Speaking of hashtags, @Jaspann made their first contribution to a public open source project (Congratulations!): They fixed hashtags that use non-English characters. Thank you!
@Jaspann, in their second contribution, fixed showing the PeerTube-specific sub-channel icon on non-PeerTube services, where it makes no sense.
Sometimes, the keyboard would stop working when using the search field after the video page was closed, no matter how hard you smashed the keys. @litetex has fixed this to prevent you from damaging your screen. Not really their first or second contribution to the project, but a welcome one nonetheless.
When items were added to the queue using the long-press menu in lists, it was clear that there was some info missing when the queue was opened. This is because the full stream info was loaded only when its page was opened. Thanks to @Douile, now the complete stream info is loaded when it is added to the queue from a list.
If you tried to share a playlist while it was still loading (you maniac) it would cause the app to crash, which has been fixed by @TiA4f8R.
@Stypox added the app icon to the fastlane metadata folder, so that the F-Droid app and website start showing the icon again.
Ooh. This is a tricky one. If a stream other than the first one in the queue was playing, and its resolution was changed, or the player type was changed (e.g. popup -> main player), the app would suddenly abandon that stream and start playing the first stream in the queue instead. This weird bug, caused by an ExoPlayer update, has been fixed by @TiA4f8R.
If you tried to view the channel page of an item in the queue whose channel page you hadn’t already viewed before, you would get a network error, which has been fixed by @ktprograms.
A Polish translation of the README was added by @Radplay. Thank you!
You want more languages? Well, we also have one in Traditional Chinese (used in Taiwan) now, added by @akamayu-ouo. Thank you too!
@litetex fixed the broken link of the “Get it on F-Droid” button in the English README on GitHub, and reduced its size to a sane value in all the translated READMEs.
Talking about broken links, @TobiGr fixed a link in the English README linking to the Portuguese README.
@albertomosconi moved the translated README files into the
docfolder to reduce visual clutter in the repo, and updated the links accordingly.
Dependabot updated spotbugs-annotations from 4.5.0 to 4.5.3. What happened, dependabot? Just one update? You’re getting lazy these days. Tut tut tut! (Pro tip: you can make fun of robots all day, because it’s not like they can ever retaliate, right? Probably. At least, we think so… Okay, maybe this wasn’t such a good idea… ACK! Why does that toaster suddenly have four legs!? Stay away! STAY AWAY!)
@litetex disabled an unreliable test for the SoundCloud stream extractor. Who even needs tests? (Just kidding, they’re a cornerstone of good programming.
Eat your broccoliWrite your unit tests, kids.)
@XiangRongLin ensured that search history entries in tests are in the correct order, fixing the sometimes-failing-sometimes-passing CI pipeline. Keep in mind what we said about tests above, they are important!
- YouTube removed the public dislike data in December, so we used a temporary workaround by calculating the dislikes using the average rating. But now that that is gone too, @litetex removed the code used to extract YouTube dislikes, and made several other improvements:
- Fixed the exception caused when a video had zero likes.
- De-duplicated a large amount of code in the service-specific stream extractors by using methods common to all of them.
- Also changed the YouTube extractor tests to reflect the removal of the dislike count (we really like tests! No, we’re not related to Hermione Granger in any way, but thanks for asking).
@litetex, while modifying the dislike tests, migrated the unit tests from JUnit 4 to JUnit 5, and changed related code accordingly.
- @TacoTheDank came in with the usual whirlwind of library updates and associated changes. The biggest change here is that we now compile with Java 11 (because we compile on SDK 30). This is a good thing… we think. (We hope.) Other than that:
- Sonarqube: 3.1.1 -> 3.3
- ktlint: 0.40.0 -> 0.43.2
- Checkstyle: 8.38 -> 9.2
- Prepare for trouble, and make it double! The nice fellow above updated yet another bunch of libraries and also removed the unused Espresso testing library:
- Gradle 7.1.1 -> 7.3.1
- google-auto-service 1.0 -> 1.0.1
- Mockito 3.6.0 -> 4.0.0
- ConstraintLayout 2.0.4 -> 2.1.2
- Google Material 1.2.1 -> 1.4.0
- Jsoup 1.13.1 -> 1.14.3
- RxJava3 3.0.7 -> 3.0.13
- PrettyTime 5.0.1.Final -> 5.0.2.Final
- AndroidX Test JUnit 1.1.2 -> 1.1.3
@XiangRongLin added the SonarList CI job back to the test run setup, which had been disabled earlier due to some issues.
@TobiGr made some small improvements to code quality and readability here and there.
@litetex configured the CI to upload test reports when an error occurs in CI runs, because the truncated stacktrace shown by default doesn’t provide enough info sometimes.
@XiangRongLin switched the JUnit asserts to AssertJ ones in
HistoryRecordManagerTestto obtain more detailed error messages, and converted the
SearchHistoryEntryJava class to a Kotlin data class for the same reason.
@mhmdanas fixed a false Android Studio warning.
@TacoTheDank collected all the untranslatable strings from here and there into a single
donottranslate.xmlfile for easy access and readability, and also removed the redundant
translatableXML attribute from settings key strings.
@TacoTheDank, the friendly neighbourhood LibraryMan, updated Gradle (7.3.1 -> 7.3.3) and Checkstyle (9.2 -> 9.2.1), and, more interestingly, fixed some hidden Gradle deprecations. We have no clue why they were hidden instead of being shown and explained up front in the changelog or release notes.
@Poussinou added a link to the donation section of the NewPipe website to the Sponsors section on the GitHub repo.
@mhmdanas made a minor edit to the License section of the README to make it more readable. Because that’s what the README is for. Reading. In case that wasn’t clear.
- @mhmdanas made another minor edit, this time to the trigger file of the CI workflow, so it doesn’t run unnecessarily. (NO, CI, the app won’t suddenly break if someone makes a spelling error in a README. Stop running pointless tests!)
Where to get this brand-new version
NewPipe notifies you about new versions. You can download them when you press the notification, which will take you to the GitHub Releases page.
If you use the F-Droid app, it, too, notifies you about updates for NewPipe.
Please keep in mind that it can take F-Droid a while to update their repository. If you have problems installing the update, you may need to uninstall NewPipe and then install it afresh. (Make sure to backup data by exporting your database from the
Settings > Content menu.)
If you already installed NewPipe from F-Droid’s repository, to get this version of NewPipe you can do one of the following:
- Wait for them to update
- Switch to NewPipe’s custom repository by following the directions in the announcement post
Note: If you installed NewPipe from GitHub Releases you will not have to uninstall NewPipe to switch to our custom repo. Just let it update your current version. Make sure you back up your data as mentioned in the warning at the top of the FAQ page!
Now that you’ve (hopefully) updated, please let us know what your experience of the latest release is, especially bugs in need of fixing. As usual, you can reach out to us via IRC (#newpipe on Libera.Chat), open issues on GitHub or, ideally, use our built-in crash reporter to send us machine-readable issue reports. You can even send in fixes yourself.
If you have any other questions, feel free to post them in the comments here and someone will reply to you. Also, thanks for reading it till the end! We put quite some time into these blog posts.