from urllib.parse import urlparse, quote from pathlib import Path import configparser import subprocess import pdb def read_config(): config = configparser.RawConfigParser() config.read("config.ini") return config def get_mixes(mixes_dir): mixes = [] for path in Path(mixes_dir).rglob('url.txt'): with open(path, "r") as fd: first_line = fd.readline() first_line = first_line.strip() url = quote(urlparse(first_line).geturl(), safe=":/") # do a sanity url parse and quote mixes.append((path.parent, url)) return mixes def download_channel(target_directory, channel_url, options="", update_mpd=False, mpd_root=""): mpd_update_options = [] if update_mpd: mpd_update_options = ["--exec", "mpc update \"{}\"".format(str(target_directory).replace(mpd_root, "", 1).lstrip("/"))] p = subprocess.Popen(["youtube-dl", *options.split(" "), *mpd_update_options, channel_url], cwd=target_directory) p.wait() config = read_config() mixes = get_mixes(config["general"]["mixes_dir"]) for folder,url in mixes: download_channel(folder, url, config["youtube-dl"]["options"], update_mpd=config["mpd"]["update"], mpd_root=config["mpd"]["mpd_root"])