Skip to content

Commit

Permalink
fix: downloading video/audio when not needed
Browse files Browse the repository at this point in the history
  • Loading branch information
MSOB7YY committed Jul 8, 2024
1 parent 07130b0 commit 4db65a5
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 16 deletions.
8 changes: 8 additions & 0 deletions lib/youtube/class/youtube_item_download_config.dart
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ class YoutubeItemDownloadConfig {
AudioStream? audioStream;
final String? prefferedVideoQualityID;
final String? prefferedAudioQualityID;
final bool? fetchMissingAudio;
final bool? fetchMissingVideo;

YoutubeItemDownloadConfig({
required this.id,
Expand All @@ -20,6 +22,8 @@ class YoutubeItemDownloadConfig {
required this.audioStream,
required this.prefferedVideoQualityID,
required this.prefferedAudioQualityID,
required this.fetchMissingAudio,
required this.fetchMissingVideo,
});

factory YoutubeItemDownloadConfig.fromJson(Map<String, dynamic> map) {
Expand All @@ -40,6 +44,8 @@ class YoutubeItemDownloadConfig {
audioStream: auds,
prefferedVideoQualityID: map['prefferedVideoQualityID'],
prefferedAudioQualityID: map['prefferedAudioQualityID'],
fetchMissingAudio: map['fetchMissingAudio'],
fetchMissingVideo: map['fetchMissingVideo'],
);
}

Expand All @@ -53,6 +59,8 @@ class YoutubeItemDownloadConfig {
'audioStream': audioStream?.toMap(),
'prefferedVideoQualityID': prefferedVideoQualityID,
'prefferedAudioQualityID': prefferedAudioQualityID,
'fetchMissingAudio': fetchMissingAudio,
'fetchMissingVideo': fetchMissingVideo,
};
}

Expand Down
33 changes: 18 additions & 15 deletions lib/youtube/controller/youtube_controller.dart
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ class YoutubeController {
static final YoutubeController _instance = YoutubeController._internal();
YoutubeController._internal();


/// {id: <filename, DownloadProgress>{}}
final downloadsVideoProgressMap = <String, RxMap<String, DownloadProgress>>{}.obs;

Expand Down Expand Up @@ -540,22 +539,26 @@ class YoutubeController {
final streams = await completer.future;

// -- video
final videos = streams.videoStreams;
if (config.prefferedVideoQualityID != null) {
config.videoStream = videos.firstWhereEff((e) => e.itag.toString() == config.prefferedVideoQualityID);
}
if (config.videoStream == null || config.videoStream?.buildUrl()?.isNotEmpty != true) {
final webm = config.filename.endsWith('.webm') || config.filename.endsWith('.WEBM');
config.videoStream = getPreferredStreamQuality(videos, qualities: preferredQualities, preferIncludeWebm: webm);
if (config.fetchMissingVideo == true) {
final videos = streams.videoStreams;
if (config.prefferedVideoQualityID != null) {
config.videoStream = videos.firstWhereEff((e) => e.itag.toString() == config.prefferedVideoQualityID);
}
if (config.videoStream == null || config.videoStream?.buildUrl()?.isNotEmpty != true) {
final webm = config.filename.endsWith('.webm') || config.filename.endsWith('.WEBM');
config.videoStream = getPreferredStreamQuality(videos, qualities: preferredQualities, preferIncludeWebm: webm);
}
}

// -- audio
final audios = streams.audioStreams;
if (config.prefferedAudioQualityID != null) {
config.audioStream = audios.firstWhereEff((e) => e.itag.toString() == config.prefferedAudioQualityID);
}
if (config.audioStream == null || config.audioStream?.buildUrl()?.isNotEmpty != true) {
config.audioStream = audios.firstNonWebm() ?? audios.firstOrNull;
if (config.fetchMissingAudio == true) {
// -- audio
final audios = streams.audioStreams;
if (config.prefferedAudioQualityID != null) {
config.audioStream = audios.firstWhereEff((e) => e.itag.toString() == config.prefferedAudioQualityID);
}
if (config.audioStream == null || config.audioStream?.buildUrl()?.isNotEmpty != true) {
config.audioStream = audios.firstNonWebm() ?? audios.firstOrNull;
}
}

// -- meta info
Expand Down
2 changes: 2 additions & 0 deletions lib/youtube/functions/download_sheet.dart
Original file line number Diff line number Diff line change
Expand Up @@ -651,6 +651,8 @@ Future<void> showDownloadVideoBottomSheet({
audioStream: selectedAudioOnlyStream.value,
prefferedVideoQualityID: selectedVideoOnlyStream.value?.itag.toString(),
prefferedAudioQualityID: selectedAudioOnlyStream.value?.itag.toString(),
fetchMissingAudio: false,
fetchMissingVideo: false,
);
if (onConfirmButtonTap != null) {
final accept = onConfirmButtonTap(groupName, itemConfig);
Expand Down
2 changes: 2 additions & 0 deletions lib/youtube/pages/yt_playlist_download_subpage.dart
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,8 @@ class _YTPlaylistDownloadPageState extends State<YTPlaylistDownloadPage> {
audioStream: null,
prefferedVideoQualityID: null,
prefferedAudioQualityID: null,
fetchMissingAudio: true,
fetchMissingVideo: !downloadAudioOnly.value,
);
}

Expand Down
2 changes: 1 addition & 1 deletion pubspec.yaml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name: namida
description: A Beautiful and Feature-rich Music Player, With YouTube & Video Support Built in Flutter
publish_to: "none"
version: 3.0.7-beta+240708228
version: 3.0.8-beta+240708232

environment:
sdk: ">=3.4.0 <4.0.0"
Expand Down

0 comments on commit 4db65a5

Please sign in to comment.