From 96ac21bb1e2984936312cbef538b11f166ce0662 Mon Sep 17 00:00:00 2001 From: MSOB7YY Date: Fri, 27 Sep 2024 01:02:46 +0300 Subject: [PATCH] chore: improved single download filename logic --- lib/youtube/functions/download_sheet.dart | 38 ++++++++++++++++--- .../pages/yt_playlist_download_subpage.dart | 4 +- pubspec.yaml | 2 +- 3 files changed, 36 insertions(+), 8 deletions(-) diff --git a/lib/youtube/functions/download_sheet.dart b/lib/youtube/functions/download_sheet.dart index df66a8a4..9cbf3921 100644 --- a/lib/youtube/functions/download_sheet.dart +++ b/lib/youtube/functions/download_sheet.dart @@ -78,12 +78,34 @@ Future showDownloadVideoBottomSheet({ updateTagsMap(defaultInitialTags); updateTagsMap(settings.youtube.initialDefaultMetadataTags); + bool videoOutputFilenameWasUserEdited = false; void updatefilenameOutput({String customName = ''}) { + if (videoOutputFilenameWasUserEdited) return; + if (customName != '') { videoOutputFilenameController.text = customName; return; } - if (initialItemConfig != null) return; // cuz already set. + + final filenameBuilderInSetting = settings.youtube.downloadFilenameBuilder.value; + if (filenameBuilderInSetting.isNotEmpty) { + final finalFilenameTempRebuilt = YoutubeController.filenameBuilder.rebuildFilenameWithDecodedParams( + filenameBuilderInSetting, + videoId, + streamResult.value, + null, + streamInfoItem ?? initialItemConfig?.streamInfoItem, + playlistInfo, + selectedVideoOnlyStream.value, + selectedAudioOnlyStream.value, + initialItemConfig?.index, + initialItemConfig?.totalLength, + ); + if (finalFilenameTempRebuilt != null && finalFilenameTempRebuilt.isNotEmpty) { + videoOutputFilenameController.text = finalFilenameTempRebuilt; + return; + } + } final videoTitle = videoInfo.value?.title ?? videoId; if (selectedAudioOnlyStream.value == null && selectedVideoOnlyStream.value == null) { @@ -100,6 +122,14 @@ Future showDownloadVideoBottomSheet({ } } + if (initialItemConfig != null) { + updatefilenameOutput(customName: initialItemConfig.filename.filename); + updateTagsMap(initialItemConfig.ffmpegTags); + videoOutputFilenameWasUserEdited = true; + } else { + updatefilenameOutput(customName: settings.youtube.downloadFilenameBuilder.value); + } + void showWebmWarning() { snackyy( title: lang.WARNING, @@ -119,11 +149,6 @@ Future showDownloadVideoBottomSheet({ if (selectedVideoOnlyStream.value?.isWebm == true) showWebmWarning(); // webm doesnt support tag editing } - if (initialItemConfig != null) { - updatefilenameOutput(customName: initialItemConfig.filename.filename); - updateTagsMap(initialItemConfig.ffmpegTags); - } - void onStreamsObtained(VideoStreamsResult? streams) { streamResult.value = streams; if (streams?.info != null) videoInfo.value = streams!.info!; @@ -629,6 +654,7 @@ Future showDownloadVideoBottomSheet({ controller: videoOutputFilenameController, hintText: videoOutputFilenameController.text, labelText: lang.FILE_NAME, + onChanged: (_) => videoOutputFilenameWasUserEdited = true, validatorMode: AutovalidateMode.always, validator: (value) { if (value == null) return lang.PLEASE_ENTER_A_NAME; diff --git a/lib/youtube/pages/yt_playlist_download_subpage.dart b/lib/youtube/pages/yt_playlist_download_subpage.dart index a2b5a5b8..e810db78 100644 --- a/lib/youtube/pages/yt_playlist_download_subpage.dart +++ b/lib/youtube/pages/yt_playlist_download_subpage.dart @@ -95,7 +95,9 @@ class _YTPlaylistDownloadPageState extends State { YoutubeItemDownloadConfig _getDummyDownloadConfig(String id, int index, {String? defaultFilename}) { final streamInfoItem = widget.infoLookup[id]; - final filename = defaultFilename ?? streamInfoItem?.title ?? YoutubeInfoController.utils.getVideoName(id) ?? id; + final filenameBuilderSettings = settings.youtube.downloadFilenameBuilder.value; + final filename = + filenameBuilderSettings.isNotEmpty ? filenameBuilderSettings : (defaultFilename ?? streamInfoItem?.title ?? YoutubeInfoController.utils.getVideoName(id) ?? id); return YoutubeItemDownloadConfig( index: index, totalLength: widget.playlistInfo?.videosCount ?? widget.ids.length, diff --git a/pubspec.yaml b/pubspec.yaml index a6676ed2..b3d6b91b 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -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: 4.4.84-beta+240926220 +version: 4.4.9-beta+240926220 environment: sdk: ">=3.4.0 <4.0.0"