#include #include #include int download(char *path, char *url, char is_audio) { int ret; char *args[10]; args[0] = "yt-dlp"; args[1] = "--config-locations"; if (is_audio) { args[2] = "/mnt/youtube/yt-dlp_audio.conf"; } else { args[2] = "/mnt/youtube/yt-dlp_video.conf"; } args[3] = "--download-archive"; if (is_audio) { char *buf = malloc(strlen(path) + 1); sprintf(buf, "%s/downloaded_audio.txt", path); args[4] = buf; } else { char *buf = malloc(strlen(path) + 1); sprintf(buf, "%s/downloaded_video.txt", path); args[4] = buf; } args[5] = "--paths"; args[6] = path; args[7] = "--yes-playlist"; args[8] = url; args[9] = 0; int pid = fork(); if (pid == -1) { printf("Couldn't fork'\n"); return 1; } else if (pid > 0) { waitpid(pid, &ret, 0); } else { execvp(args[0], args); } free(buf); return ret; } int main(int argc, char **argv) { if (argc != 4) { fprintf(stderr, "Incorred amount of arguments\n"); } char *path; char *url; char is_audio; size_t i; for (i = 1; i < 4; i++) { if (argv[i][0] == '-') { if (strcmp(argv[i], "-audio") == 0) { is_audio = 1; } else if (strcmp(argv[i], "-video") == 0) { is_audio = 0; } else { fprintf(stderr, "Invalid option: %s\n", argv[i]); return 1; } } else if (strstr(argv[i], "https://")) { url = argv[i]; } else { path = argv[i]; } } if (!path) { fprintf(stderr, "No path specified\n"); return 1; } if (!url) { fprintf(stderr, "No valid url specified\n"); return 1; } int ret; ret = download(path, url, is_audio); if (ret != 0) { fprintf(stderr, "Download Failed\n"); return 1; } return 0; }