spotube/lib/services/youtube_engine/youtube_explode_engine.dart
Kingkor Roy Tirtho 1e6d709e04
feat: implement yt-dlp for desktop and NewPipeExtractor for Android (#2316)
* feat: add youtube engine abstraction and yt-dlp integration

* chore: add yt-dlp as optional dependency

* feat: implement custom path support for youtube engines

* chore: check for custom path in setting engine select dropdown

* chore: update yt_dlp_dart

* chore: setting video url instead of video id in fetchSiblings

* feat: implement NewPipe engine

* chore: update local path to git url for flutter_new_pipe_extractor package

* chore: fix android build isn't working

* chore: fix routes not working when initially signing in

* refactor: drop fallback support to different sources
2025-02-11 21:36:07 +06:00

48 lines
1.2 KiB
Dart

import 'package:spotube/services/youtube_engine/youtube_engine.dart';
import 'package:youtube_explode_dart/youtube_explode_dart.dart';
class YouTubeExplodeEngine implements YouTubeEngine {
static final YoutubeExplode _youtubeExplode = YoutubeExplode();
static bool get isAvailableForPlatform => true;
static Future<bool> isInstalled() async {
return true;
}
@override
Future<StreamManifest> getStreamManifest(String videoId) {
return _youtubeExplode.videos.streamsClient.getManifest(
videoId,
requireWatchPage: false,
ytClients: [
YoutubeApiClient.android,
YoutubeApiClient.mweb,
],
);
}
@override
Future<Video> getVideo(String videoId) {
return _youtubeExplode.videos.get(videoId);
}
@override
Future<(Video, StreamManifest)> getVideoWithStreamInfo(String videoId) async {
final video = await getVideo(videoId);
final streamManifest = await getStreamManifest(videoId);
return (video, streamManifest);
}
@override
Future<List<Video>> searchVideos(String query) {
return _youtubeExplode.search
.search(
query,
filter: TypeFilters.video,
)
.then((searchList) => searchList.toList());
}
}