From f6734a0f9e1cb3817f3ef2b1374cac2623f8d84b Mon Sep 17 00:00:00 2001 From: tomasalias Date: Fri, 2 Jan 2026 18:01:41 +0100 Subject: [PATCH 1/2] chore: fix white screen issue --- lib/models/metadata/image.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/models/metadata/image.dart b/lib/models/metadata/image.dart index 2ee0f748..6dc0ba94 100644 --- a/lib/models/metadata/image.dart +++ b/lib/models/metadata/image.dart @@ -33,7 +33,7 @@ extension SpotubeImageExtensions on List? { int index = 1, required ImagePlaceholder placeholder, }) { - final sortedImage = this?.sorted((a, b) => a.width!.compareTo(b.width!)); + final sortedImage = this?.sorted((a, b) => (a.width ?? 0).compareTo(b.width ?? 0)); return sortedImage != null && sortedImage.isNotEmpty ? sortedImage[ From 3bdb49c3a560651edf4ecb6e76a8c3a39c22fca9 Mon Sep 17 00:00:00 2001 From: Kingkor Roy Tirtho Date: Mon, 1 Jun 2026 09:56:48 +0600 Subject: [PATCH 2/2] fix(newpipe): fallback to muxed streams if no audio stream is available --- .fvmrc | 3 +- .vscode/settings.json | 3 +- .../youtube_engine/newpipe_engine.dart | 36 +++++++++++++++++++ pubspec.lock | 22 ++++++------ pubspec.yaml | 6 ++-- 5 files changed, 53 insertions(+), 17 deletions(-) diff --git a/.fvmrc b/.fvmrc index cf986e39..2bb4682a 100644 --- a/.fvmrc +++ b/.fvmrc @@ -1,4 +1,3 @@ { - "flutter": "3.35.2", - "flavors": {} + "flutter": "3.35.2" } \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index 69c80bb3..6cfcec03 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -30,5 +30,6 @@ "README.md": "LICENSE,CODE_OF_CONDUCT.md,CONTRIBUTING.md,SECURITY.md,CONTRIBUTION.md,CHANGELOG.md,PRIVACY_POLICY.md", "*.dart": "${capture}.g.dart,${capture}.freezed.dart" }, - "dart.flutterSdkPath": ".fvm/versions/3.35.2" + "dart.flutterSdkPath": ".fvm/versions/3.35.2", + "makefile.configureOnOpen": false } \ No newline at end of file diff --git a/lib/services/youtube_engine/newpipe_engine.dart b/lib/services/youtube_engine/newpipe_engine.dart index d6445a19..c865b66c 100644 --- a/lib/services/youtube_engine/newpipe_engine.dart +++ b/lib/services/youtube_engine/newpipe_engine.dart @@ -28,6 +28,26 @@ class NewPipeEngine implements YouTubeEngine { ); } + AudioOnlyStreamInfo _parseVideoStream(VideoStream stream, String videoId) { + return AudioOnlyStreamInfo( + VideoId(videoId), + stream.itag, + Uri.parse(stream.content), + StreamContainer.parse(stream.mediaFormat!.mimeType.split("/").last), + FileSize.unknown, + Bitrate(stream.bitrate), + stream.codec, + switch (stream.bitrate) { + > 130 * 1024 => "high", + > 64 * 1024 => "medium", + _ => "low", + }, + [], + MediaType.parse(stream.mediaFormat!.mimeType), + null, + ); + } + Video _parseVideo(VideoInfo info) { return Video( VideoId(info.id), @@ -76,6 +96,14 @@ class NewPipeEngine implements YouTubeEngine { final streams = video.audioStreams.map((stream) => _parseAudioStream(stream, videoId)); + if (streams.isEmpty) { + final videoStreams = video.videoStreams + .map((stream) => _parseVideoStream(stream, videoId)); + if (videoStreams.isNotEmpty) { + return StreamManifest(videoStreams); + } + } + return StreamManifest(streams); } @@ -93,6 +121,14 @@ class NewPipeEngine implements YouTubeEngine { final streams = video.audioStreams.map((stream) => _parseAudioStream(stream, videoId)); + if (streams.isEmpty) { + final videoStreams = video.videoStreams + .map((stream) => _parseVideoStream(stream, videoId)); + if (videoStreams.isNotEmpty) { + return (_parseVideo(video), StreamManifest(videoStreams)); + } + } + return (_parseVideo(video), StreamManifest(streams)); } diff --git a/pubspec.lock b/pubspec.lock index dd5a987e..e962383a 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -486,10 +486,10 @@ packages: dependency: transitive description: name: data_widget - sha256: "95388df890189014f702b7e93f9de6bcf7d45143a99f6288f31899f10be441ba" + sha256: "4947aae3c50635496d56f94ad18de98e19015c5ebf01abee0f39a2c098c7021a" url: "https://pub.dev" source: hosted - version: "0.0.2" + version: "0.0.3" dbus: dependency: transitive description: @@ -947,7 +947,7 @@ packages: description: path: "." ref: HEAD - resolved-ref: ab3ff415114b7b43593e6ee718ad3d760af18350 + resolved-ref: "41cbd821ce49b9343136f67d83d3117e582dad75" url: "https://github.com/KRTirtho/flutter_new_pipe_extractor" source: git version: "0.1.0" @@ -2376,26 +2376,26 @@ packages: dependency: "direct dev" description: name: test - sha256: "75906bf273541b676716d1ca7627a17e4c4070a3a16272b7a3dc7da3b9f3f6b7" + sha256: "65e29d831719be0591f7b3b1a32a3cda258ec98c58c7b25f7b84241bc31215bb" url: "https://pub.dev" source: hosted - version: "1.26.3" + version: "1.26.2" test_api: dependency: transitive description: name: test_api - sha256: ab2726c1a94d3176a45960b6234466ec367179b87dd74f1611adb1f3b5fb9d55 + sha256: "522f00f556e73044315fa4585ec3270f1808a4b186c936e612cab0b565ff1e00" url: "https://pub.dev" source: hosted - version: "0.7.7" + version: "0.7.6" test_core: dependency: transitive description: name: test_core - sha256: "0cc24b5ff94b38d2ae73e1eb43cc302b77964fbf67abad1e296025b78deb53d0" + sha256: "80bf5a02b60af04b09e14f6fe68b921aad119493e26e490deaca5993fef1b05a" url: "https://pub.dev" source: hosted - version: "0.6.12" + version: "0.6.11" time: dependency: transitive description: @@ -2728,10 +2728,10 @@ packages: dependency: "direct main" description: name: youtube_explode_dart - sha256: "3d731d71df9901b1915bae806781df519cff32517e36db279f844ae619669e45" + sha256: "10134a53989b2f3dc576121735aec8fc6d88784956f4a2ad1a2525b006373a76" url: "https://pub.dev" source: hosted - version: "3.0.5" + version: "3.1.0" yt_dlp_dart: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index 7941c625..b01ef57f 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -90,7 +90,7 @@ dependencies: ref: dart-3-support url: https://github.com/KRTirtho/scrobblenaut.git scroll_to_index: ^3.0.1 - shadcn_flutter: ^0.0.47 + shadcn_flutter: 0.0.47 shared_preferences: ^2.2.3 shelf: ^1.4.1 shelf_router: ^1.1.4 @@ -114,7 +114,7 @@ dependencies: wikipedia_api: ^0.1.0 win32_registry: ^1.1.5 window_manager: ^0.4.3 - youtube_explode_dart: ^3.0.5 + youtube_explode_dart: ^3.1.0 yt_dlp_dart: git: url: https://github.com/KRTirtho/yt_dlp_dart.git @@ -171,7 +171,7 @@ dev_dependencies: pub_api_client: ^3.0.0 io: ^1.0.4 drift_dev: ^2.21.0 - test: ^1.25.7 + test: any auto_route_generator: ^9.0.0 dependency_overrides: