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"", 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():