8 proc parseOptions(): CommandLineOptions =
15 for kind, key, value in getopt():
19 of cmdShortOption, cmdLongOption:
21 of "m", "music": musicOnly = true
22 of "l", "lucky": feelingLucky = true
23 of "f", "full-screen": fullScreen = true
27 return (searchQuery, musicOnly, feelingLucky, fullScreen)
32 player = selectMediaPlayer()
33 (searchQuery, musicOnly, feelingLucky, fullScreen) = parseOptions()
35 if searchQuery.startswith("https:") or searchQuery.startswith("magnet:"):
36 directPlay(searchQuery, player)
38 let searchResults = extractTitlesAndUrls(getYoutubePage(searchQuery))
40 proc getUserInput(): string =
43 presentVideoOptions(searchResults)
44 stdout.styledWrite(fgYellow, "Choose video number: ")
47 # This is a pure function with no side effects
48 func buildArgs(number: int): seq[string] =
49 var args = @[searchResults[number].url]
50 if musicOnly: args.add("--no-video")
51 if fullScreen: args.add("--fullscreen")
55 let userInput = getUserInput()
59 let videoNumber = parseInt(userInput)
60 styledEcho "\n", fgGreen, "Playing ", styleBright, fgMagenta, searchResults[videoNumber].title
62 # Play the video using the preferred/available media player
63 play(player, buildArgs(videoNumber))