Add an option to use a youtube-dl fork, and change the command line arguments.

This commit is contained in:
Justin Hawkins 2021-09-24 15:35:54 +09:30
parent c039c3e585
commit 3eaf1b921d
2 changed files with 72 additions and 12 deletions

View File

@ -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

37
main.go
View File

@ -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()