]>
Commit | Line | Data |
---|---|---|
6ff2dbac | 1 | import |
6ff2dbac | 2 | parseopt, |
6ff2dbac | 3 | std/[terminal], |
d65a1dcf | 4 | strutils |
44978125 | 5 | |
d65a1dcf | 6 | import lib |
44978125 | 7 | |
121e06b2 JN |
8 | proc parseOptions(): CommandLineOptions = |
9 | var | |
10 | searchQuery = "" | |
11 | musicOnly = false | |
12 | feelingLucky = false | |
d1e4d2de | 13 | fullScreen = false |
121e06b2 JN |
14 | |
15 | for kind, key, value in getopt(): | |
16 | case kind | |
17 | of cmdArgument: | |
18 | searchQuery = key | |
19 | of cmdShortOption, cmdLongOption: | |
20 | case key | |
21 | of "m", "music": musicOnly = true | |
22 | of "l", "lucky": feelingLucky = true | |
d1e4d2de | 23 | of "f", "full-screen": fullScreen = true |
121e06b2 JN |
24 | of cmdEnd: |
25 | discard | |
26 | ||
d1e4d2de | 27 | return (searchQuery, musicOnly, feelingLucky, fullScreen) |
121e06b2 | 28 | |
121e06b2 JN |
29 | proc main() = |
30 | let | |
31 | player = selectMediaPlayer() | |
d1e4d2de | 32 | (searchQuery, musicOnly, feelingLucky, fullScreen) = parseOptions() |
121e06b2 | 33 | |
92f80e5a JN |
34 | if searchQuery.startswith("https:") or searchQuery.startswith("magnet:"): |
35 | directPlay(searchQuery, player) | |
121e06b2 JN |
36 | |
37 | let searchResults = extractTitlesAndUrls(getYoutubePage(searchQuery)) | |
38 | ||
39 | let number = | |
40 | if feelingLucky: 0 | |
41 | else: | |
42 | presentVideoOptions(searchResults) | |
43 | stdout.styledWrite(fgYellow, "Choose video number: ") | |
44 | parseInt(readLine(stdin)) | |
45 | ||
46 | styledEcho "\n", fgGreen, "Playing ", styleBright, fgMagenta, searchResults[number].title | |
efcc0441 | 47 | |
c8812b68 JN |
48 | # This is a pure function with no side effects |
49 | func buildArgs(): seq[string] = | |
50 | var args = @[searchResults[number].url] | |
51 | if musicOnly: args.add("--no-video") | |
52 | if fullScreen: args.add("--fullscreen") | |
53 | return args | |
d1e4d2de | 54 | |
121e06b2 | 55 | # Play the video using the preferred/available media player |
c8812b68 | 56 | play(player, buildArgs()) |
a2319a3f | 57 | |
d65a1dcf JN |
58 | when isMainModule: |
59 | main() |