let
processOptions = {poStdErrToStdOut, poUsePath} # Add poEchoCmd to debug
- PEERTUBE_REGEX = re"videos\/watch\/[0-9a-f]{8}\b-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-\b[0-9a-f]{12}"
+ PEERTUBE_REGEX = re"w\/[0-9a-zA-z]{22}"
proc isInstalled(program: string): bool =
proc directPlay*(url: string, player: string, options: Table[string, bool]) =
let url =
if find(url, PEERTUBE_REGEX) != -1 and "webtorrent".isInstalled:
- getPeerTubeMagnetLink(url)
+ getPeerTubeMagnetLink(url, options["musicOnly"])
else: url
if url.startswith("magnet:") or url.endswith(".torrent"):
if options["musicOnly"]:
- # TODO Replace with WebTorrent once it supports media player options
- discard execShellCmd(&"peerflix '{url}' -a --{player} -- --no-video")
+ discard execShellCmd(&"webtorrent '{url}' --{player} --player-args='--no-video'")
else:
- # WebTorrent is so much faster!
discard execProcess("webtorrent", args=[url, &"--{player}"], options=processOptions)
else:
play(player, options, url)
proc download*(args: openArray[string], title: string) =
printTitle("Downloading", title)
- discard execShellCmd(&"youtube-dl {args.join(\" \")}")
+ discard execShellCmd(&"yt-dlp {args.join(\" \")}")
proc directDownload*(url: string, options: Options) =
let args = buildDownloadArgs(url, options)
if "aria2c".isInstalled:
- discard execShellCmd(&"youtube-dl {args.join(\" \")} --external-downloader aria2c --external-downloader-args '-x 16 -s 16 -k 2M'")
+ discard execShellCmd(&"yt-dlp {args.join(\" \")} --external-downloader aria2c --external-downloader-args '-x 16 -s 16 -k 2M'")
else:
- discard execShellCmd(&"youtube-dl {args.join(\" \")}")
+ discard execShellCmd(&"yt-dlp {args.join(\" \")}")
proc luckyDownload*(searchQuery: string, options: Options) =
- let args = @[&"ytsearch:\"{searchQuery}\""] & buildDownloadArgs("", options)
- let title = execProcess(&"youtube-dl --get-title {args.join(\" \")}").split("\n")[0]
+ let args = @[&"ytsearch1:\"{searchQuery}\""] & buildDownloadArgs("", options)
+ let title = execProcess(&"yt-dlp --get-title {args.join(\" \")}").split("\n")[0]
download(args, title)
proc luckyPlay*(searchQuery: string, player: string, options: Options) =
let args = @[&"ytsearch:\"{searchQuery}\""] & buildDownloadArgs("", options)
- let output = execProcess(&"youtube-dl --get-url --get-title {args.join(\" \")}").split("\n")
+ let output = execProcess(&"yt-dlp --get-url --get-title {args.join(\" \")}").split("\n")
let
title = output[0]
url = &"\"{output[1]}\""