9 proc parseOptions(): CommandLineOptions =
16 for kind, key, value in getopt():
20 of cmdShortOption, cmdLongOption:
22 of "m", "music": musicOnly = true
23 of "l", "lucky": feelingLucky = true
24 of "f", "full-screen": fullScreen = true
28 return (searchQuery, musicOnly, feelingLucky, fullScreen)
33 player = selectMediaPlayer()
34 (searchQuery, musicOnly, feelingLucky, fullScreen) = parseOptions()
36 if searchQuery.startswith("https:") or searchQuery.startswith("magnet:"):
37 directPlay(searchQuery, player)
40 let searchResults = extractTitlesAndUrls(getYoutubePage(searchQuery))
42 proc getUserInput(): string =
45 presentVideoOptions(searchResults[..(limit-1)])
46 stdout.styledWrite(fgYellow, "Choose video number: ")
49 # This is a pure function with no side effects
50 func buildArgs(number: int): seq[string] =
51 var args = @[searchResults[number].url]
52 if musicOnly: args.add("--no-video")
53 if fullScreen: args.add("--fullscreen")
57 let userInput = getUserInput()
59 if userInput == "all":
60 for number in 0..(len(searchResults)):
61 play(player, buildArgs(number), searchResults[number].title)
66 # Play the video using the preferred/available media player
67 let videoNumber = parseInt(userInput)
68 play(player, buildArgs(videoNumber), searchResults[videoNumber].title)