1616from ytmdl .exceptions import (
1717 DownloadError , ConvertError , NoMetaError , MetadataError
1818)
19+ from ytmdl .meta .yt import extract_meta_from_yt
1920
2021
2122logger = Logger ("core" )
@@ -200,7 +201,7 @@ def trim(name: str, args) -> None:
200201 trim .Trim (name )
201202
202203
203- def meta (conv_name : str , song_name : str , search_by : str , args ):
204+ def meta (conv_name : str , song_name : str , search_by : str , link : str , args ):
204205 """Handle adding the metadata for the passed song.
205206
206207 We will use the passed name to search for metadata, ask
@@ -236,14 +237,26 @@ def meta(conv_name: str, song_name: str, search_by: str, args):
236237
237238 # If no meta was found raise error
238239 if not TRACK_INFO :
239- # Check if we are supposed to add manual meta
240- if args .on_meta_error != "manual" :
240+ # Check if we are supposed to add manual meta or from youtube
241+ if args .on_meta_error not in [ "manual" , "youtube" ] :
241242 raise NoMetaError (search_by )
242-
243- TRACK_INFO = manual .get_data (song_name )
244- return TRACK_INFO
243+
244+ if args .on_meta_error == "manual" :
245+ TRACK_INFO = manual .get_data (song_name )
246+ elif args .on_meta_error == 'youtube' :
247+ # Extract meta from youtube
248+ track_info = extract_meta_from_yt (link )
249+ TRACK_INFO = [track_info ]
250+
251+ option = song .setData (TRACK_INFO , IS_QUIET , conv_name , PASSED_FORMAT , 0 , skip_showing_choice = True )
252+ if not isinstance (option , int ):
253+ raise MetadataError (search_by )
254+
255+ return TRACK_INFO [option ]
245256
246257 logger .info ('Setting data...' )
258+
259+
247260 option = song .setData (TRACK_INFO , IS_QUIET , conv_name , PASSED_FORMAT ,
248261 args .choice )
249262
@@ -260,6 +273,6 @@ def meta(conv_name: str, song_name: str, search_by: str, args):
260273 logger .info (
261274 "Amending the search because -2 was entered as the option" )
262275 search_by = utility .get_new_meta_search_by (search_by )
263- return meta (conv_name , song_name , search_by , args )
276+ return meta (conv_name , song_name , search_by , link , args )
264277
265278 return TRACK_INFO [option ]
0 commit comments