88from typing import Any
99
1010import aiofiles
11+ import aiohttp
1112import click
1213from click_help_colors import HelpColorsGroup # type: ignore
1314from rich .logging import RichHandler
15+ from rich .markdown import Markdown
1416from rich .prompt import Confirm
1517from rich .traceback import install
1618
17- from .. import db
19+ from .. import __version__ , db
1820from ..config import DEFAULT_CONFIG_PATH , Config , set_user_defaults
1921from ..console import console
2022from .main import Main
@@ -33,7 +35,7 @@ def wrapper(*args, **kwargs):
3335 help_headers_color = "yellow" ,
3436 help_options_color = "green" ,
3537)
36- @click .version_option (version = "2.0.2" )
38+ @click .version_option (version = __version__ )
3739@click .option (
3840 "--config-path" ,
3941 default = DEFAULT_CONFIG_PATH ,
@@ -152,11 +154,30 @@ def rip(ctx, config_path, folder, no_db, quality, codec, no_progress, verbose):
152154async def url (ctx , urls ):
153155 """Download content from URLs."""
154156 with ctx .obj ["config" ] as cfg :
157+ cfg : Config
158+ updates = cfg .session .misc .check_for_updates
159+ if updates :
160+ # Run in background
161+ version_coro = asyncio .create_task (latest_streamrip_version ())
162+ else :
163+ version_coro = None
164+
155165 async with Main (cfg ) as main :
156166 await main .add_all (urls )
157167 await main .resolve ()
158168 await main .rip ()
159169
170+ if version_coro is not None :
171+ latest_version , notes = await version_coro
172+ if latest_version != __version__ :
173+ console .print (
174+ f"\n [green]A new version of streamrip [cyan]v{ latest_version } [/cyan]"
175+ " is available! Run [white][bold]pip3 install streamrip --upgrade[/bold][/white]"
176+ " to update.[/green]\n "
177+ )
178+
179+ console .print (Markdown (notes ))
180+
160181
161182@rip .command ()
162183@click .argument (
@@ -390,5 +411,22 @@ async def id(ctx, source, media_type, id):
390411 await main .rip ()
391412
392413
414+ async def latest_streamrip_version () -> tuple [str , str | None ]:
415+ async with aiohttp .ClientSession () as s :
416+ async with s .get ("https://pypi.org/pypi/streamrip/json" ) as resp :
417+ data = await resp .json ()
418+ version = data ["info" ]["version" ]
419+
420+ if version == __version__ :
421+ return version , None
422+
423+ async with s .get (
424+ "https://api.github.com/repos/nathom/streamrip/releases/latest"
425+ ) as resp :
426+ json = await resp .json ()
427+ notes = json ["body" ]
428+ return version , notes
429+
430+
393431if __name__ == "__main__" :
394432 rip ()
0 commit comments