diff options
Diffstat (limited to 'watch.c')
-rw-r--r-- | watch.c | 35 |
1 files changed, 25 insertions, 10 deletions
@@ -20,7 +20,7 @@ #define MAX_PATH 260 #define SR_ERR_NOASSOC (HINSTANCE)31 -#define USAGE "usage: %s URL\n", argv[0] +#define USAGE "usage: %s [/c argument-string] URL\n", argv[0] char out[MAX_PATH]; @@ -33,7 +33,7 @@ void sigbreak(int sig) { int main(int argc, char *argv[]) { bool new, title; - char *cmd, temp[MAX_PATH]; + char *cmd, *extra, temp[MAX_PATH], *url; FILE *f, *p; HINSTANCE r; int c, i, linecount; @@ -50,19 +50,34 @@ int main(int argc, char *argv[]) { strcat(out, "watch.tmp.mpcpl"); if (argc == 1) goto open; /* open previous link */ - if (argc > 2) die(USAGE); - if (strncmp(argv[1], "watch:", 6) == 0) /* support watch: urls */ - argv[1] += 6; + if (argv[1][0] == '/') { + if (argv[1][1] != 'c' || argc != 4) die(USAGE); + extra = argv[2]; + url = argv[3]; + } else { + if (argc != 2) die(USAGE); + extra = NULL; + url = argv[1]; + } + + if (strncmp(url, "watch:", 6) == 0) /* support watch: urls */ + url += 6; - for (i = 0; i < strlen(argv[1]); i++) - if (argv[1][i] == '"') die("URL cannot contain quotes (\")\n"); + for (i = 0; i < strlen(url); i++) + if (url[i] == '"') die("URL cannot contain quotes (\")\n"); /* start youtube-dl */ - cmd = malloc(sizeof("youtube-dl -eg \"\"") + strlen(argv[1]) * sizeof(char)); - if (cmd == NULL) err(1, "malloc"); - if (sprintf(cmd, "youtube-dl -eg \"%s\"", argv[1]) < 0) err(1, "sprintf"); + if (extra != NULL) { + cmd = malloc(sizeof("youtube-dl -eg --youtube-skip-dash-manifest \"\"") + (strlen(url) + strlen(extra)) * sizeof(char)); + if (cmd == NULL) err(1, "malloc"); + if (sprintf(cmd, "youtube-dl -eg --youtube-skip-dash-manifest %s \"%s\"", extra, url) < 0) err(1, "sprintf"); + } else { + cmd = malloc(sizeof("youtube-dl -eg --youtube-skip-dash-manifest \"\"") + strlen(url) * sizeof(char)); + if (cmd == NULL) err(1, "malloc"); + if (sprintf(cmd, "youtube-dl -eg --youtube-skip-dash-manifest \"%s\"", url) < 0) err(1, "sprintf"); + } p = _popen(cmd, "r"); if (p == NULL) err(1, "popen"); |