From 3eaf1b921d8320270c448a1d721f0628617a9542 Mon Sep 17 00:00:00 2001 From: Justin Hawkins Date: Fri, 24 Sep 2021 15:35:54 +0930 Subject: [PATCH] Add an option to use a youtube-dl fork, and change the command line arguments. --- README.md | 47 +++++++++++++++++++++++++++++++++++++++++------ main.go | 37 +++++++++++++++++++++++++++++++------ 2 files changed, 72 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 9697efe..88c8816 100644 --- a/README.md +++ b/README.md @@ -25,20 +25,55 @@ Binaries are available at https://github.com/tardisx/gropple/releases With no arguments, it will listen on port 6283 and use an address of 'http://localhost:6283'. The address must be specified so that the bookmarklet can refer to the correct -host when it is not running on your local machine. You may also need to specify +host if it is not running on your local machine. You may also need to specify a different address if you are running it behind a proxy server or similar. ## Using -Bring up `http://localhost:6283` (or your chosen address) in your browser. You should see a link to the bookmarklet at the top of the screen, and the list of downloads (currently empty). +Bring up `http://localhost:6283` (or your chosen address) in your browser. You +should see a link to the bookmarklet at the top of the screen, and the list of +downloads (currently empty). -Drag the bookmarklet to your favourites bar, or otherwise bookmark it as you see fit. +Drag the bookmarklet to your favourites bar, or otherwise bookmark it as you +see fit. -Whenever you are on a page with a video you would like to download, simply click the bookmarklet. +Whenever you are on a page with a video you would like to download, simply +click the bookmarklet. -A popup window will appear, the download will start on the your gropple server and the status will be shown in the window. +A popup window will appear, the download will start on the your gropple server +and the status will be shown in the window. -You may close this window at any time without stopping the download, the status of all downloads is available on the index page. +You may close this window at any time without stopping the download, the status +of all downloads is available on the index page. + +## Using an alternative downloader + +The default downloader is youtube-dl. It is possible to use a different downloader +via the `-dl-cmd` command line option. + +While `gropple` will use your `PATH` to find the executable, you may also want +to specify a full path instead.o + +So, for instance, to use `youtube-dlc` instead of `youtube-dl` and specify the +full path: + +`gropple -dl-cmd /home/username/bin/youtube-dlc` + +Note that this is only the path to the executable. If you need to change the +command arguments, see below. + +## Changing the youtube-dl arguments + +The default arguments passed to `youtube-dl` are: + +* `--newline` (needed to allow gropple to properly parse the output) +* `--write-info-json` (optional, but provides information on the download in the corresponding .json file) +* `-f` and `bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best` (choose the type of video `youtube-dl` will download) + +These are customisable on the command line for `gropple`. For example, to duplicate these default options, you would +do: + +`gropple -dl-args '--newline' -dl-args '--write-info-json' -dl-args '-f' -dl-args 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best` ## TODO diff --git a/main.go b/main.go index 46f38fb..4bdfdf5 100644 --- a/main.go +++ b/main.go @@ -39,18 +39,45 @@ var downloadPath = "./" var address string +var dlCmd = "youtube-dl" + +type args []string + +var dlArgs = args{} +var defaultArgs = args{ + "--write-info-json", + "-f", "bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best", + "--newline", +} + const currentVersion = "v0.02" //go:embed web var webFS embed.FS +func (i *args) Set(value string) error { + *i = append(*i, strings.TrimSpace(value)) + return nil +} + +func (i *args) String() string { + return fmt.Sprintf("%v", i) +} + func main() { var port int flag.IntVar(&port, "port", 6283, "port to listen on") flag.StringVar(&address, "address", "http://localhost:6283", "address for the service") flag.StringVar(&downloadPath, "path", "", "path for downloaded files - defaults to current directory") + flag.StringVar(&dlCmd, "dl-cmd", "youtube-dl", "downloader to use") + flag.Var(&dlArgs, "dl-args", "arguments to the downloader") + flag.Parse() + if len(dlArgs) == 0 { + dlArgs = defaultArgs + } + r := mux.NewRouter() r.HandleFunc("/", HomeHandler) r.HandleFunc("/fetch", FetchHandler) @@ -164,13 +191,11 @@ func FetchHandler(w http.ResponseWriter, r *http.Request) { } func queue(dl *download) { + cmdSlice := []string{} + cmdSlice = append(cmdSlice, dlArgs...) + cmdSlice = append(cmdSlice, dl.Url) - cmd := exec.Command( - "youtube-dl", - "--write-info-json", - "-f", "bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best", - "--newline", dl.Url, - ) + cmd := exec.Command(dlCmd, cmdSlice...) cmd.Dir = downloadPath stdout, err := cmd.StdoutPipe()