Skip to content

[YouTube] Fix extraction of playlist items and some properties in lockup view models#1503

Merged
TobiGr merged 8 commits into
TeamNewPipe:devfrom
AudricV:yt_fix-lockups-stream-items-parsing-in-some-cases
Jun 9, 2026
Merged

[YouTube] Fix extraction of playlist items and some properties in lockup view models#1503
TobiGr merged 8 commits into
TeamNewPipe:devfrom
AudricV:yt_fix-lockups-stream-items-parsing-in-some-cases

Conversation

@AudricV

@AudricV AudricV commented May 31, 2026

Copy link
Copy Markdown
Member

This PR, on lockup view models of streams:

  • fixes parsing of upload date of upcoming livestreams premiered;
  • handles properly date and view count parsing for members first or members only content;
  • uses again direct access with indexes to parse view count and date, this reduces usage of language dependant methods. The order of metadata has always been [view count, upload date] for me, so I removed the contrary;
  • adds support of getContentAvailability in lockup stream items;
  • does some refactor/cleanup;
  • removes duplicate tests and a case which we seem to not have to deal with (lockupViewModelChannelTabSectionHeader) and adds one for members only in a channel (with the test data from feat: support ContentAvailability for video lockup metadata #1497 with some unneeded data removed);
  • adds support of lockup view models in playlists.

I tested with the current extractor tests, using mocks and online version and also the channels given in TeamNewPipe/NewPipe#13540 (comment), everything seem to work properly.

Supersedes #1496 and #1497.

Fixes TeamNewPipe/NewPipe#13540 (at least the last comments), fixes TeamNewPipe/NewPipe#13552.

@AudricV AudricV added bug Issue or PR is related to a bug YouTube Service, https://www.youtube.com/ labels May 31, 2026
@absurdlylongusername absurdlylongusername self-assigned this Jun 2, 2026
@absurdlylongusername absurdlylongusername self-requested a review June 2, 2026 17:38
@absurdlylongusername absurdlylongusername removed their assignment Jun 2, 2026
@AudricV AudricV force-pushed the yt_fix-lockups-stream-items-parsing-in-some-cases branch from a3c0acf to 2e49ffc Compare June 6, 2026 20:22
@AudricV AudricV changed the title [YouTube] Fix extraction of date and view count in lockup view models of stream, support content availability and do some refactor [YouTube] Fix extraction of playlist items and some properties in lockup view models Jun 6, 2026
@AudricV AudricV added the ASAP Issue needs to be fixed as soon as possible label Jun 6, 2026
@absurdlylongusername

Copy link
Copy Markdown
Member

When going to https://www.youtube.com/@wildlifeaid live tab I am getting these exceptions. I presume from their 3 livestreams that are live right now.

Exception

  • User Action: requested channel
  • Request: Start loading: null
  • Content Country: US
  • Content Language: en-US
  • App Language: en_US
  • Service: YouTube
  • Timestamp: 2026-06-07T22:57:23.587+01:00
  • Package: org.schabi.newpipe.debug
  • Service: YouTube
  • Version: 0.28.7
  • OS: Linux Android 10 - 29
Exceptions (3)

Crash log 1

org.schabi.newpipe.extractor.exceptions.ParsingException: Could not get date text: no metadata part from metadata rows
	at org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeStreamInfoItemLockupExtractor.getDateText(YoutubeStreamInfoItemLockupExtractor.java:502)
	at org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeStreamInfoItemLockupExtractor.isPremiere(YoutubeStreamInfoItemLockupExtractor.java:494)
	at org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeStreamInfoItemLockupExtractor.getContentAvailability(YoutubeStreamInfoItemLockupExtractor.java:435)
	at org.schabi.newpipe.extractor.stream.StreamInfoItemsCollector.extract(StreamInfoItemsCollector.java:107)
	at org.schabi.newpipe.extractor.MultiInfoItemsCollector.extract(MultiInfoItemsCollector.java:82)
	at org.schabi.newpipe.extractor.MultiInfoItemsCollector.extract(MultiInfoItemsCollector.java:48)
	at org.schabi.newpipe.extractor.InfoItemsCollector.commit(InfoItemsCollector.java:104)
	at org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeChannelTabExtractor.commitVideoLockup(YoutubeChannelTabExtractor.java:394)
	at org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeChannelTabExtractor.commitLockup(YoutubeChannelTabExtractor.java:335)
	at org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeChannelTabExtractor.collectItem(YoutubeChannelTabExtractor.java:287)
	at org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeChannelTabExtractor.lambda$collectItemsFrom$6$org-schabi-newpipe-extractor-services-youtube-extractors-YoutubeChannelTabExtractor(YoutubeChannelTabExtractor.java:258)
	at org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeChannelTabExtractor$$ExternalSyntheticLambda11.apply(D8$$SyntheticClass:0)
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:203)
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:203)
	at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:185)
	at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1390)
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:485)
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:475)
	at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:236)
	at java.util.stream.ReferencePipeline.reduce(ReferencePipeline.java:492)
	at org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeChannelTabExtractor.collectItemsFrom(YoutubeChannelTabExtractor.java:260)
	at org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeChannelTabExtractor.getInitialPage(YoutubeChannelTabExtractor.java:161)
	at org.schabi.newpipe.extractor.utils.ExtractorHelper.getItemsPageOrLogError(ExtractorHelper.java:21)
	at org.schabi.newpipe.extractor.channel.tabs.ChannelTabInfo.getInfo(ChannelTabInfo.java:57)
	at org.schabi.newpipe.extractor.channel.tabs.ChannelTabInfo.getInfo(ChannelTabInfo.java:36)
	at org.schabi.newpipe.util.ExtractorHelper.lambda$getChannelTab$5(ExtractorHelper.java:136)
	at org.schabi.newpipe.util.ExtractorHelper$$ExternalSyntheticLambda0.call(D8$$SyntheticClass:0)
	at io.reactivex.rxjava3.internal.operators.single.SingleFromCallable.subscribeActual(SingleFromCallable.java:43)
	at io.reactivex.rxjava3.core.Single.subscribe(Single.java:4855)
	at io.reactivex.rxjava3.internal.operators.single.SingleDoOnSuccess.subscribeActual(SingleDoOnSuccess.java:35)
	at io.reactivex.rxjava3.core.Single.subscribe(Single.java:4855)
	at io.reactivex.rxjava3.internal.operators.maybe.MaybeFromSingle.subscribeActual(MaybeFromSingle.java:41)
	at io.reactivex.rxjava3.core.Maybe.subscribe(Maybe.java:5377)
	at io.reactivex.rxjava3.internal.operators.maybe.MaybeConcatArray$ConcatMaybeObserver.drain(MaybeConcatArray.java:153)
	at io.reactivex.rxjava3.internal.operators.maybe.MaybeConcatArray$ConcatMaybeObserver.request(MaybeConcatArray.java:78)
	at io.reactivex.rxjava3.internal.operators.flowable.FlowableElementAtMaybe$ElementAtSubscriber.onSubscribe(FlowableElementAtMaybe.java:66)
	at io.reactivex.rxjava3.internal.operators.maybe.MaybeConcatArray.subscribeActual(MaybeConcatArray.java:42)
	at io.reactivex.rxjava3.core.Flowable.subscribe(Flowable.java:16149)
	at io.reactivex.rxjava3.internal.operators.flowable.FlowableElementAtMaybe.subscribeActual(FlowableElementAtMaybe.java:36)
	at io.reactivex.rxjava3.core.Maybe.subscribe(Maybe.java:5377)
	at io.reactivex.rxjava3.internal.operators.maybe.MaybeToSingle.subscribeActual(MaybeToSingle.java:46)
	at io.reactivex.rxjava3.core.Single.subscribe(Single.java:4855)
	at io.reactivex.rxjava3.internal.operators.single.SingleSubscribeOn$SubscribeOnObserver.run(SingleSubscribeOn.java:89)
	at io.reactivex.rxjava3.core.Scheduler$DisposeTask.run(Scheduler.java:644)
	at io.reactivex.rxjava3.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:80)
	at io.reactivex.rxjava3.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:71)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
	at java.lang.Thread.run(Thread.java:919)

Crash log 2

org.schabi.newpipe.extractor.exceptions.ParsingException: Could not get date text: no metadata part from metadata rows
	at org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeStreamInfoItemLockupExtractor.getDateText(YoutubeStreamInfoItemLockupExtractor.java:502)
	at org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeStreamInfoItemLockupExtractor.isPremiere(YoutubeStreamInfoItemLockupExtractor.java:494)
	at org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeStreamInfoItemLockupExtractor.getContentAvailability(YoutubeStreamInfoItemLockupExtractor.java:435)
	at org.schabi.newpipe.extractor.stream.StreamInfoItemsCollector.extract(StreamInfoItemsCollector.java:107)
	at org.schabi.newpipe.extractor.MultiInfoItemsCollector.extract(MultiInfoItemsCollector.java:82)
	at org.schabi.newpipe.extractor.MultiInfoItemsCollector.extract(MultiInfoItemsCollector.java:48)
	at org.schabi.newpipe.extractor.InfoItemsCollector.commit(InfoItemsCollector.java:104)
	at org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeChannelTabExtractor.commitVideoLockup(YoutubeChannelTabExtractor.java:394)
	at org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeChannelTabExtractor.commitLockup(YoutubeChannelTabExtractor.java:335)
	at org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeChannelTabExtractor.collectItem(YoutubeChannelTabExtractor.java:287)
	at org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeChannelTabExtractor.lambda$collectItemsFrom$6$org-schabi-newpipe-extractor-services-youtube-extractors-YoutubeChannelTabExtractor(YoutubeChannelTabExtractor.java:258)
	at org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeChannelTabExtractor$$ExternalSyntheticLambda11.apply(D8$$SyntheticClass:0)
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:203)
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:203)
	at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:185)
	at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1390)
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:485)
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:475)
	at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:236)
	at java.util.stream.ReferencePipeline.reduce(ReferencePipeline.java:492)
	at org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeChannelTabExtractor.collectItemsFrom(YoutubeChannelTabExtractor.java:260)
	at org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeChannelTabExtractor.getInitialPage(YoutubeChannelTabExtractor.java:161)
	at org.schabi.newpipe.extractor.utils.ExtractorHelper.getItemsPageOrLogError(ExtractorHelper.java:21)
	at org.schabi.newpipe.extractor.channel.tabs.ChannelTabInfo.getInfo(ChannelTabInfo.java:57)
	at org.schabi.newpipe.extractor.channel.tabs.ChannelTabInfo.getInfo(ChannelTabInfo.java:36)
	at org.schabi.newpipe.util.ExtractorHelper.lambda$getChannelTab$5(ExtractorHelper.java:136)
	at org.schabi.newpipe.util.ExtractorHelper$$ExternalSyntheticLambda0.call(D8$$SyntheticClass:0)
	at io.reactivex.rxjava3.internal.operators.single.SingleFromCallable.subscribeActual(SingleFromCallable.java:43)
	at io.reactivex.rxjava3.core.Single.subscribe(Single.java:4855)
	at io.reactivex.rxjava3.internal.operators.single.SingleDoOnSuccess.subscribeActual(SingleDoOnSuccess.java:35)
	at io.reactivex.rxjava3.core.Single.subscribe(Single.java:4855)
	at io.reactivex.rxjava3.internal.operators.maybe.MaybeFromSingle.subscribeActual(MaybeFromSingle.java:41)
	at io.reactivex.rxjava3.core.Maybe.subscribe(Maybe.java:5377)
	at io.reactivex.rxjava3.internal.operators.maybe.MaybeConcatArray$ConcatMaybeObserver.drain(MaybeConcatArray.java:153)
	at io.reactivex.rxjava3.internal.operators.maybe.MaybeConcatArray$ConcatMaybeObserver.request(MaybeConcatArray.java:78)
	at io.reactivex.rxjava3.internal.operators.flowable.FlowableElementAtMaybe$ElementAtSubscriber.onSubscribe(FlowableElementAtMaybe.java:66)
	at io.reactivex.rxjava3.internal.operators.maybe.MaybeConcatArray.subscribeActual(MaybeConcatArray.java:42)
	at io.reactivex.rxjava3.core.Flowable.subscribe(Flowable.java:16149)
	at io.reactivex.rxjava3.internal.operators.flowable.FlowableElementAtMaybe.subscribeActual(FlowableElementAtMaybe.java:36)
	at io.reactivex.rxjava3.core.Maybe.subscribe(Maybe.java:5377)
	at io.reactivex.rxjava3.internal.operators.maybe.MaybeToSingle.subscribeActual(MaybeToSingle.java:46)
	at io.reactivex.rxjava3.core.Single.subscribe(Single.java:4855)
	at io.reactivex.rxjava3.internal.operators.single.SingleSubscribeOn$SubscribeOnObserver.run(SingleSubscribeOn.java:89)
	at io.reactivex.rxjava3.core.Scheduler$DisposeTask.run(Scheduler.java:644)
	at io.reactivex.rxjava3.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:80)
	at io.reactivex.rxjava3.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:71)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
	at java.lang.Thread.run(Thread.java:919)

Crash log 3

org.schabi.newpipe.extractor.exceptions.ParsingException: Could not get date text: no metadata part from metadata rows
	at org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeStreamInfoItemLockupExtractor.getDateText(YoutubeStreamInfoItemLockupExtractor.java:502)
	at org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeStreamInfoItemLockupExtractor.isPremiere(YoutubeStreamInfoItemLockupExtractor.java:494)
	at org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeStreamInfoItemLockupExtractor.getContentAvailability(YoutubeStreamInfoItemLockupExtractor.java:435)
	at org.schabi.newpipe.extractor.stream.StreamInfoItemsCollector.extract(StreamInfoItemsCollector.java:107)
	at org.schabi.newpipe.extractor.MultiInfoItemsCollector.extract(MultiInfoItemsCollector.java:82)
	at org.schabi.newpipe.extractor.MultiInfoItemsCollector.extract(MultiInfoItemsCollector.java:48)
	at org.schabi.newpipe.extractor.InfoItemsCollector.commit(InfoItemsCollector.java:104)
	at org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeChannelTabExtractor.commitVideoLockup(YoutubeChannelTabExtractor.java:394)
	at org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeChannelTabExtractor.commitLockup(YoutubeChannelTabExtractor.java:335)
	at org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeChannelTabExtractor.collectItem(YoutubeChannelTabExtractor.java:287)
	at org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeChannelTabExtractor.lambda$collectItemsFrom$6$org-schabi-newpipe-extractor-services-youtube-extractors-YoutubeChannelTabExtractor(YoutubeChannelTabExtractor.java:258)
	at org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeChannelTabExtractor$$ExternalSyntheticLambda11.apply(D8$$SyntheticClass:0)
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:203)
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:203)
	at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:185)
	at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1390)
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:485)
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:475)
	at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:236)
	at java.util.stream.ReferencePipeline.reduce(ReferencePipeline.java:492)
	at org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeChannelTabExtractor.collectItemsFrom(YoutubeChannelTabExtractor.java:260)
	at org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeChannelTabExtractor.getInitialPage(YoutubeChannelTabExtractor.java:161)
	at org.schabi.newpipe.extractor.utils.ExtractorHelper.getItemsPageOrLogError(ExtractorHelper.java:21)
	at org.schabi.newpipe.extractor.channel.tabs.ChannelTabInfo.getInfo(ChannelTabInfo.java:57)
	at org.schabi.newpipe.extractor.channel.tabs.ChannelTabInfo.getInfo(ChannelTabInfo.java:36)
	at org.schabi.newpipe.util.ExtractorHelper.lambda$getChannelTab$5(ExtractorHelper.java:136)
	at org.schabi.newpipe.util.ExtractorHelper$$ExternalSyntheticLambda0.call(D8$$SyntheticClass:0)
	at io.reactivex.rxjava3.internal.operators.single.SingleFromCallable.subscribeActual(SingleFromCallable.java:43)
	at io.reactivex.rxjava3.core.Single.subscribe(Single.java:4855)
	at io.reactivex.rxjava3.internal.operators.single.SingleDoOnSuccess.subscribeActual(SingleDoOnSuccess.java:35)
	at io.reactivex.rxjava3.core.Single.subscribe(Single.java:4855)
	at io.reactivex.rxjava3.internal.operators.maybe.MaybeFromSingle.subscribeActual(MaybeFromSingle.java:41)
	at io.reactivex.rxjava3.core.Maybe.subscribe(Maybe.java:5377)
	at io.reactivex.rxjava3.internal.operators.maybe.MaybeConcatArray$ConcatMaybeObserver.drain(MaybeConcatArray.java:153)
	at io.reactivex.rxjava3.internal.operators.maybe.MaybeConcatArray$ConcatMaybeObserver.request(MaybeConcatArray.java:78)
	at io.reactivex.rxjava3.internal.operators.flowable.FlowableElementAtMaybe$ElementAtSubscriber.onSubscribe(FlowableElementAtMaybe.java:66)
	at io.reactivex.rxjava3.internal.operators.maybe.MaybeConcatArray.subscribeActual(MaybeConcatArray.java:42)
	at io.reactivex.rxjava3.core.Flowable.subscribe(Flowable.java:16149)
	at io.reactivex.rxjava3.internal.operators.flowable.FlowableElementAtMaybe.subscribeActual(FlowableElementAtMaybe.java:36)
	at io.reactivex.rxjava3.core.Maybe.subscribe(Maybe.java:5377)
	at io.reactivex.rxjava3.internal.operators.maybe.MaybeToSingle.subscribeActual(MaybeToSingle.java:46)
	at io.reactivex.rxjava3.core.Single.subscribe(Single.java:4855)
	at io.reactivex.rxjava3.internal.operators.single.SingleSubscribeOn$SubscribeOnObserver.run(SingleSubscribeOn.java:89)
	at io.reactivex.rxjava3.core.Scheduler$DisposeTask.run(Scheduler.java:644)
	at io.reactivex.rxjava3.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:80)
	at io.reactivex.rxjava3.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:71)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
	at java.lang.Thread.run(Thread.java:919)


@AudricV

AudricV commented Jun 7, 2026

Copy link
Copy Markdown
Member Author

It should be fixed with e9cd77e.

AudricV and others added 8 commits June 9, 2026 22:42
- Fix parsing of upload date of livestreams premiered;
- Handle properly date and view count parsing for members first or
members only content;
- Use again direct access with indexes to parse view count and date,
this reduces usage of language dependant methods. Order of metadata
parts has been observed to always be [view count, upload date];
- Handle missing metadata rows directly to throw better exceptions,
making easier to debug the source of lack of stream details;
- Refactor how channel lockups video items are detected, by replacing
method getInfoMetadataRowIndex with isChannelLockupItem;
- Decrease Java's Stream API usage to reduce complexity.
lockupViewModelChannelTabSectionHeader's case has never been observed
in the YouTube extracted endpoints we use.
Also check content availability for all tests of
YoutubeStreamInfoItemTest.

Co-authored-by: FineFindus <FineFindus@proton.me>
Also do some refactor/optimizations in YoutubePlaylistExtractor on the
fly.
@TobiGr TobiGr force-pushed the yt_fix-lockups-stream-items-parsing-in-some-cases branch from 482b7c6 to a6f1feb Compare June 9, 2026 20:57
@sonarqubecloud

sonarqubecloud Bot commented Jun 9, 2026

Copy link
Copy Markdown

Quality Gate Failed Quality Gate failed

Failed conditions
5.4% Duplication on New Code (required ≤ 3%)

See analysis details on SonarQube Cloud

@TobiGr TobiGr left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks. I reviewed briefly and did not find anything interesting. Just applied minor stuff.

@TobiGr TobiGr merged commit 639b371 into TeamNewPipe:dev Jun 9, 2026
1 of 3 checks passed
@AudricV AudricV deleted the yt_fix-lockups-stream-items-parsing-in-some-cases branch June 9, 2026 21:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ASAP Issue needs to be fixed as soon as possible bug Issue or PR is related to a bug YouTube Service, https://www.youtube.com/

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Unable to parse the date: Scheduled for 26/05/2026, 10:30 Reload no working

3 participants