diff --git a/rip/cli.py b/rip/cli.py index 06392ce..3c337a0 100644 --- a/rip/cli.py +++ b/rip/cli.py @@ -18,6 +18,7 @@ logging.basicConfig(level="WARNING") logger = logging.getLogger("streamrip") outdated = False +newest_version = __version__ class DownloadCommand(Command): @@ -86,11 +87,38 @@ class DownloadCommand(Command): update_check.join() if outdated: + import subprocess + import re + self.line( - "A new version of streamrip is available! Run " - "pip3 install streamrip --upgrade to update" + f"Updating streamrip to v{newest_version}...\n" ) + # update in background + update_p = subprocess.Popen( + ["pip3", "install", "streamrip", "--upgrade"], + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + ) + + md_header = re.compile(r"#\s+(.+)") + bullet_point = re.compile(r"-\s*(.+)") + code = re.compile(r"`([^`]+)`") + issue_reference = re.compile(r"(#\d+)") + + release_notes = requests.get( + "https://api.github.com/repos/nathom/streamrip/releases/latest" + ).json()["body"] + + release_notes = md_header.sub(r"
\1
", release_notes) + release_notes = bullet_point.sub(r"• \1", release_notes) + release_notes = code.sub(r"\1", release_notes) + release_notes = issue_reference.sub(r"\1", release_notes) + + self.line(release_notes) + + update_p.wait() + return 0 @@ -448,6 +476,7 @@ class Application(BaseApplication): formatter.set_style("path", Style("green", options=["bold"])) formatter.set_style("cmd", Style("magenta")) formatter.set_style("title", Style("yellow", options=["bold"])) + formatter.set_style("header", Style("yellow", options=["bold", "underline"])) io.output.set_formatter(formatter) io.error_output.set_formatter(formatter) @@ -491,8 +520,10 @@ def clean_options(*opts): def is_outdated(): global outdated + global newest_version r = requests.get("https://pypi.org/pypi/streamrip/json").json() - outdated = r["info"]["version"] != __version__ + newest_version = r["info"]["version"] + outdated = newest_version != __version__ def main():