streamlink 7.2.0__tar.gz → 7.3.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {streamlink-7.2.0 → streamlink-7.3.0}/CHANGELOG.md +10 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/PKG-INFO +2 -3
- {streamlink-7.2.0 → streamlink-7.3.0}/completions/bash/streamlink +5 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/dev-requirements.txt +1 -1
- {streamlink-7.2.0 → streamlink-7.3.0}/docs/_build/man/streamlink.1 +1 -1
- {streamlink-7.2.0 → streamlink-7.3.0}/docs/changelog.md +10 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/docs/developing.rst +1 -1
- {streamlink-7.2.0 → streamlink-7.3.0}/pyproject.toml +3 -6
- {streamlink-7.2.0 → streamlink-7.3.0}/setup.py +1 -1
- streamlink-7.3.0/src/streamlink/_version.py +1 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/twitcasting.py +5 -1
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/validate/__init__.py +1 -1
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink.egg-info/PKG-INFO +2 -3
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink.egg-info/SOURCES.txt +16 -4
- streamlink-7.3.0/src/streamlink_cli/console/__init__.py +3 -0
- {streamlink-7.2.0/src/streamlink_cli → streamlink-7.3.0/src/streamlink_cli/console}/console.py +39 -30
- {streamlink-7.2.0/src/streamlink_cli/utils → streamlink-7.3.0/src/streamlink_cli/console}/progress.py +19 -102
- streamlink-7.3.0/src/streamlink_cli/console/stream.py +163 -0
- streamlink-7.3.0/src/streamlink_cli/console/stream_wrapper.py +37 -0
- streamlink-7.3.0/src/streamlink_cli/console/stream_wrapper.pyi +14 -0
- streamlink-7.3.0/src/streamlink_cli/console/terminal.py +79 -0
- streamlink-7.3.0/src/streamlink_cli/console/user_input.py +17 -0
- streamlink-7.3.0/src/streamlink_cli/console/windows.py +200 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink_cli/constants.py +3 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink_cli/main.py +55 -18
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink_cli/streamrunner.py +7 -22
- {streamlink-7.2.0/tests/cli → streamlink-7.3.0/tests/cli/console}/test_console.py +84 -29
- {streamlink-7.2.0/tests/cli/utils → streamlink-7.3.0/tests/cli/console}/test_progress.py +45 -78
- streamlink-7.3.0/tests/cli/console/test_stream.py +386 -0
- streamlink-7.3.0/tests/cli/console/test_stream_wrapper.py +58 -0
- streamlink-7.3.0/tests/cli/console/test_terminal.py +46 -0
- streamlink-7.3.0/tests/cli/console/test_windows.py +181 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/cli/main/conftest.py +16 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/cli/main/test_logging.py +28 -48
- streamlink-7.3.0/tests/cli/main/test_output_stream.py +197 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/cli/test_streamrunner.py +31 -104
- streamlink-7.3.0/tests/webbrowser/__init__.py +0 -0
- streamlink-7.2.0/src/streamlink/_version.py +0 -1
- streamlink-7.2.0/tests/cli/main/test_output_stream.py +0 -102
- {streamlink-7.2.0 → streamlink-7.3.0}/AUTHORS +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/LICENSE +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/MANIFEST.in +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/README.md +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/build_backend/__init__.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/build_backend/commands.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/build_backend/onbuild.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/build_backend/plugins_json.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/build_backend/test_build_backend.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/build_backend/test_onbuild.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/build_backend/test_plugins_json.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/completions/zsh/_streamlink +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/docs/Makefile +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/docs/_man.rst +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/docs/_static/apple-touch-icon.png +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/docs/_static/favicon-16x16.png +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/docs/_static/favicon-32x32.png +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/docs/_static/favicon.ico +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/docs/_static/icon-ffmpeg.svg +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/docs/_static/icon-python.svg +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/docs/_static/icon.svg +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/docs/_static/opengraph-image.png +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/docs/_static/site.webmanifest +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/docs/_static/styles/custom.css +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/docs/_templates/base.html +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/docs/_templates/page.html +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/docs/_templates/sidebar/brand.html +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/docs/_templates/sidebar/github-buttons.html +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/docs/api/cache.rst +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/docs/api/exceptions.rst +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/docs/api/options.rst +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/docs/api/plugin.rst +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/docs/api/session.rst +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/docs/api/stream.rst +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/docs/api/streamlink.rst +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/docs/api/validate.rst +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/docs/api/webbrowser.rst +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/docs/api.rst +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/docs/api_guide/quickstart.rst +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/docs/api_guide/validate.rst +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/docs/api_guide.rst +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/docs/applications.rst +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/docs/cli/config.rst +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/docs/cli/metadata.rst +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/docs/cli/plugin-sideloading.rst +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/docs/cli/plugins/twitch.rst +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/docs/cli/plugins.rst +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/docs/cli/protocols.rst +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/docs/cli/proxy.rst +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/docs/cli/tutorial.rst +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/docs/cli.rst +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/docs/conf.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/docs/deprecations.rst +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/docs/docutils.conf +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/docs/ext_argparse.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/docs/ext_github.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/docs/ext_html_template_vars.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/docs/ext_plugins.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/docs/ext_releaseref.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/docs/index.rst +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/docs/install.rst +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/docs/migrations.rst +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/docs/players.rst +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/docs/plugins.rst +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/docs/support.rst +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/docs/thirdparty.rst +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/docs-requirements.txt +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/icon.svg +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/script/build-shell-completions.sh +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/setup.cfg +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/__init__.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/__main__.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/api.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/buffers.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/cache.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/compat.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/exceptions.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/logger.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/options.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/packages/__init__.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/packages/requests_file.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugin/__init__.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugin/api/__init__.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugin/api/useragents.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugin/api/validate.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugin/api/webbrowser/__init__.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugin/api/webbrowser/aws_waf.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugin/api/websocket.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugin/plugin.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/__init__.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/abematv.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/adultswim.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/albavision.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/aloula.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/app17.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/ard_live.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/ard_mediathek.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/artetv.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/atpchallenger.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/atresplayer.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/bbciplayer.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/bfmtv.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/bigo.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/bilibili.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/blazetv.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/bloomberg.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/brightcove.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/btv.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/cbsnews.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/cdnbg.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/ceskatelevize.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/chzzk.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/cinergroup.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/clubbingtv.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/cmmedia.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/cnbce.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/cnews.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/dailymotion.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/dash.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/delfi.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/deutschewelle.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/dlive.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/dogan.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/dogus.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/douyin.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/drdk.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/earthcam.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/euronews.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/filmon.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/goltelevision.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/goodgame.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/googledrive.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/gulli.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/hiplayer.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/hls.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/http.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/htv.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/huajiao.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/huya.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/indihometv.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/invintus.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/kick.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/kugou.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/livestream.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/lnk.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/lrt.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/ltv_lsm_lv.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/mangomolo.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/mdstrm.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/mediaklikk.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/mediavitrina.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/mitele.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/mixcloud.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/mjunoon.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/mrtmk.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/n13tv.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/nasaplus.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/nhkworld.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/nicolive.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/nimotv.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/nos.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/nrk.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/okru.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/olympicchannel.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/oneplusone.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/onetv.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/openrectv.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/pandalive.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/piaulizaportal.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/picarto.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/piczel.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/pixiv.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/pluto.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/pluzz.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/radiko.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/raiplay.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/reuters.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/rtpa.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/rtpplay.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/rtve.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/rtvs.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/ruv.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/sbscokr.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/showroom.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/soop.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/sportal.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/sportschau.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/ssh101.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/stadium.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/steam.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/streann.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/stv.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/svtplay.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/swisstxt.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/telefe.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/telemadrid.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/tf1.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/tiktok.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/trovo.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/turkuvaz.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/tv360.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/tv3cat.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/tv5monde.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/tv8.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/tv999.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/tvibo.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/tviplayer.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/tvp.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/tvtoya.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/twitch.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/ustreamtv.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/ustvnow.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/vidio.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/vimeo.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/vinhlongtv.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/vk.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/vkvideo.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/vtvgo.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/welt.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/wwenetwork.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/youtube.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/yupptv.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/zattoo.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/zdf_mediathek.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/zeenews.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/py.typed +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/session/__init__.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/session/http.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/session/http.pyi +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/session/http_useragents.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/session/options.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/session/plugins.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/session/session.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/stream/__init__.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/stream/dash/__init__.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/stream/dash/dash.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/stream/dash/manifest.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/stream/dash/segment.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/stream/ffmpegmux.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/stream/file.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/stream/filtered.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/stream/hls/__init__.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/stream/hls/hls.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/stream/hls/m3u8.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/stream/hls/segment.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/stream/http.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/stream/segmented/__init__.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/stream/segmented/segment.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/stream/segmented/segmented.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/stream/stream.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/stream/wrappers.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/user_input.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/utils/__init__.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/utils/args.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/utils/cache.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/utils/crypto.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/utils/data.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/utils/formatter.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/utils/l10n.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/utils/module.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/utils/named_pipe.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/utils/parse.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/utils/path.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/utils/processoutput.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/utils/random.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/utils/socket.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/utils/times.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/utils/url.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/validate/_exception.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/validate/_schemas.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/validate/_validate.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/validate/_validators.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/webbrowser/__init__.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/webbrowser/cdp/__init__.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/webbrowser/cdp/client.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/webbrowser/cdp/connection.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/webbrowser/cdp/devtools/__init__.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/webbrowser/cdp/devtools/browser.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/webbrowser/cdp/devtools/debugger.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/webbrowser/cdp/devtools/dom.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/webbrowser/cdp/devtools/emulation.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/webbrowser/cdp/devtools/fetch.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/webbrowser/cdp/devtools/input_.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/webbrowser/cdp/devtools/inspector.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/webbrowser/cdp/devtools/io.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/webbrowser/cdp/devtools/network.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/webbrowser/cdp/devtools/page.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/webbrowser/cdp/devtools/runtime.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/webbrowser/cdp/devtools/security.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/webbrowser/cdp/devtools/target.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/webbrowser/cdp/devtools/util.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/webbrowser/cdp/exceptions.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/webbrowser/chromium.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/webbrowser/exceptions.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/webbrowser/webbrowser.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink.egg-info/dependency_links.txt +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink.egg-info/entry_points.txt +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink.egg-info/requires.txt +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink.egg-info/top_level.txt +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink_cli/__init__.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink_cli/__main__.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink_cli/_parser.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink_cli/argparser.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink_cli/compat.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink_cli/exceptions.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink_cli/output/__init__.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink_cli/output/abc.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink_cli/output/file.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink_cli/output/http.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink_cli/output/player.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink_cli/py.typed +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink_cli/show_matchers.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink_cli/utils/__init__.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink_cli/utils/formatter.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink_cli/utils/path.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink_cli/utils/player.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink_cli/utils/versioncheck.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/__init__.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/cli/__init__.py +0 -0
- {streamlink-7.2.0/tests/cli/main → streamlink-7.3.0/tests/cli/console}/__init__.py +0 -0
- {streamlink-7.2.0/tests/cli/output → streamlink-7.3.0/tests/cli/main}/__init__.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/cli/main/test_can_handle_url.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/cli/main/test_check_file_output.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/cli/main/test_create_output.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/cli/main/test_formatter.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/cli/main/test_handle_url.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/cli/main/test_output_stream_passthrough.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/cli/main/test_player_argv.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/cli/main/test_resolve_stream_name.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/cli/main/test_setup_config_args.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/cli/main/test_show_matchers.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/cli/main/test_version_check.py +0 -0
- {streamlink-7.2.0/tests/cli/utils → streamlink-7.3.0/tests/cli/output}/__init__.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/cli/output/test_file.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/cli/output/test_player.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/cli/test_argparser.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/cli/test_compat.py +0 -0
- {streamlink-7.2.0/tests/mixins → streamlink-7.3.0/tests/cli/utils}/__init__.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/cli/utils/test_formatter.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/cli/utils/test_path.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/cli/utils/test_player.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/cli/utils/test_versioncheck.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/conftest.py +0 -0
- {streamlink-7.2.0/tests/plugin → streamlink-7.3.0/tests/mixins}/__init__.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/mixins/stream_hls.py +0 -0
- {streamlink-7.2.0/tests/session → streamlink-7.3.0/tests/plugin}/__init__.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugin/override/testplugin.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugin/testplugin.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugin/testplugin_invalid.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugin/testplugin_missing.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/__init__.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/conftest.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_abematv.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_adultswim.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_albavision.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_aloula.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_app17.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_ard_live.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_ard_mediathek.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_artetv.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_atpchallenger.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_atresplayer.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_bbciplayer.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_bfmtv.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_bigo.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_bilibili.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_blazetv.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_bloomberg.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_brightcove.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_btv.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_cbsnews.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_cdnbg.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_ceskatelevize.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_chzzk.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_cinergroup.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_clubbingtv.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_cmmedia.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_cnbce.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_cnews.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_dailymotion.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_dash.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_delfi.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_deutschewelle.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_dlive.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_dogan.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_dogus.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_douyin.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_drdk.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_earthcam.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_euronews.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_filmon.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_goltelevision.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_goodgame.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_googledrive.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_gulli.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_hiplayer.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_hls.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_http.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_htv.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_huajiao.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_huya.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_indihometv.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_invintus.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_kick.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_kugou.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_livestream.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_lnk.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_lrt.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_ltv_lsm_lv.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_mangomolo.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_mdstrm.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_mediaklikk.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_mediavitrina.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_mitele.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_mixcloud.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_mjunoon.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_mrtmk.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_n13tv.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_nasaplus.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_nhkworld.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_nicolive.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_nimotv.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_nos.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_nrk.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_okru.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_olympicchannel.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_oneplusone.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_onetv.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_openrectv.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_pandalive.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_piaulizaportal.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_picarto.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_piczel.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_pixiv.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_pluto.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_pluzz.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_radiko.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_raiplay.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_reuters.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_rtpa.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_rtpplay.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_rtve.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_rtvs.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_ruv.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_sbscokr.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_showroom.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_soop.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_sportal.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_sportschau.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_ssh101.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_stadium.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_steam.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_streann.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_stv.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_svtplay.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_swisstxt.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_telefe.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_telemadrid.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_tf1.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_tiktok.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_trovo.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_turkuvaz.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_tv360.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_tv3cat.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_tv5monde.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_tv8.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_tv999.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_tvibo.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_tviplayer.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_tvp.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_tvtoya.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_twitcasting.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_twitch.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_ustreamtv.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_ustvnow.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_vidio.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_vimeo.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_vinhlongtv.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_vk.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_vkvideo.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_vtvgo.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_welt.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_wwenetwork.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_youtube.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_yupptv.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_zattoo.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_zdf_mediathek.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_zeenews.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/__init__.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/cli/config/custom +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/cli/config/primary +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/cli/config/primary.testplugin +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/cli/config/secondary +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/cli/config/secondary.testplugin +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/dash/test_1.mpd +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/dash/test_10.mpd +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/dash/test_11_static.mpd +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/dash/test_2.mpd +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/dash/test_3.mpd +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/dash/test_8.mpd +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/dash/test_9.mpd +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/dash/test_baseurl_nested.mpd +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/dash/test_baseurl_urljoin.mpd +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/dash/test_dynamic_no_publish_time_timeline_with_start.mpd +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/dash/test_dynamic_no_publish_time_timeline_without_start.mpd +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/dash/test_dynamic_segment_list_no_duration.mpd +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/dash/test_dynamic_segment_list_p1.mpd +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/dash/test_dynamic_segment_list_p2.mpd +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/dash/test_dynamic_segment_list_p3.mpd +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/dash/test_dynamic_segment_list_p4.mpd +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/dash/test_dynamic_segment_list_p5.mpd +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/dash/test_dynamic_timeline_continued_p1.mpd +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/dash/test_dynamic_timeline_continued_p2.mpd +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/dash/test_no_segment_list_or_template.mpd +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/dash/test_segment_list.mpd +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/dash/test_segments_byterange.mpd +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/dash/test_segments_dynamic_number.mpd +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/dash/test_static_no_publish_time.mpd +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/dash/test_suggested_presentation_delay.mpd +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/dash/test_timeline_ids.mpd +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/hls/test_1.m3u8 +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/hls/test_date.m3u8 +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/hls/test_master.m3u8 +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/hls/test_master_twitch_vod.m3u8 +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/hls/test_media_language.m3u8 +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/hls/test_media_language_special.m3u8 +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/hls/test_multivariant_bandwidth.m3u8 +0 -0
- {streamlink-7.2.0/tests/stream → streamlink-7.3.0/tests/session}/__init__.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/session/test_http.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/session/test_options.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/session/test_plugins.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/session/test_session.py +0 -0
- {streamlink-7.2.0/tests/stream/dash → streamlink-7.3.0/tests/stream}/__init__.py +0 -0
- {streamlink-7.2.0/tests/stream/hls → streamlink-7.3.0/tests/stream/dash}/__init__.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/stream/dash/test_dash.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/stream/dash/test_manifest.py +0 -0
- {streamlink-7.2.0/tests/testutils → streamlink-7.3.0/tests/stream/hls}/__init__.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/stream/hls/test_hls.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/stream/hls/test_hls_filtered.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/stream/hls/test_m3u8.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/stream/test_ffmpegmux.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/stream/test_file.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/stream/test_segmented.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/stream/test_stream_json.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/stream/test_stream_to_url.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/stream/test_stream_wrappers.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/test_api_websocket.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/test_buffers.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/test_cache.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/test_compat.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/test_logger.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/test_options.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/test_plugin.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/test_plugin_userinput.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/test_plugins.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/test_streamlink_api.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/test_validate.py +0 -0
- {streamlink-7.2.0/tests/utils → streamlink-7.3.0/tests/testutils}/__init__.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/testutils/handshake.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/testutils/test_handshake.py +0 -0
- {streamlink-7.2.0/tests/webbrowser → streamlink-7.3.0/tests/utils}/__init__.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/utils/test_args.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/utils/test_cache.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/utils/test_crypto.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/utils/test_data.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/utils/test_formatter.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/utils/test_l10n.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/utils/test_module.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/utils/test_named_pipe.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/utils/test_parse.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/utils/test_path.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/utils/test_processoutput.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/utils/test_random.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/utils/test_times.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/utils/test_url.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/webbrowser/cdp/__init__.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/webbrowser/cdp/conftest.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/webbrowser/cdp/test_client.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/webbrowser/cdp/test_connection.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/webbrowser/conftest.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/webbrowser/test_chromium.py +0 -0
- {streamlink-7.2.0 → streamlink-7.3.0}/tests/webbrowser/test_webbrowser.py +0 -0
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## streamlink 7.3.0 (2025-04-26)
|
|
4
|
+
|
|
5
|
+
- Changed: download progress to use the console output stream rather than always `stderr`, which previously caused log and progress messages to be interweaved ([#6497](https://github.com/streamlink/streamlink/pull/6497), [#6496](https://github.com/streamlink/streamlink/pull/6496))
|
|
6
|
+
- Changed: download progress output to be a status message line at the bottom of the console output, unless `--progress=force` is set in non-interactive or unsupported environments, in which case less frequent regular progress messages are written ([#6497](https://github.com/streamlink/streamlink/pull/6497), [#6496](https://github.com/streamlink/streamlink/pull/6496))
|
|
7
|
+
- Fixed: potential division by zero error when formatting progress output ([#6498](https://github.com/streamlink/streamlink/pull/6498))
|
|
8
|
+
- Build: bumped `setuptools` requirement from `>=65.6` to `>=77` and switched to PEP 639 project license metadata format ([#6502](https://github.com/streamlink/streamlink/pull/6502))
|
|
9
|
+
|
|
10
|
+
[Full changelog](https://github.com/streamlink/streamlink/compare/7.2.0...7.3.0)
|
|
11
|
+
|
|
12
|
+
|
|
3
13
|
## streamlink 7.2.0 (2025-04-04)
|
|
4
14
|
|
|
5
15
|
- Added: `decompress` extras marker to Streamlink's optional dependencies for installing `brotli` and `zstandard`, which were previously implied optional dependencies via the transitive dependency `urllib3` ([#6451](https://github.com/streamlink/streamlink/pull/6451))
|
|
@@ -1,17 +1,16 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: streamlink
|
|
3
|
-
Version: 7.
|
|
3
|
+
Version: 7.3.0
|
|
4
4
|
Summary: Streamlink is a command-line utility that extracts streams from various services and pipes them into a video player of choice.
|
|
5
5
|
Author: Streamlink
|
|
6
6
|
Author-email: streamlink@protonmail.com
|
|
7
|
-
License:
|
|
7
|
+
License-Expression: BSD-2-Clause
|
|
8
8
|
Project-URL: Homepage, https://github.com/streamlink/streamlink
|
|
9
9
|
Project-URL: Documentation, https://streamlink.github.io/
|
|
10
10
|
Project-URL: Tracker, https://github.com/streamlink/streamlink/issues
|
|
11
11
|
Project-URL: Source, https://github.com/streamlink/streamlink
|
|
12
12
|
Project-URL: Funding, https://streamlink.github.io/latest/support.html
|
|
13
13
|
Classifier: Development Status :: 5 - Production/Stable
|
|
14
|
-
Classifier: License :: OSI Approved :: BSD License
|
|
15
14
|
Classifier: Environment :: Console
|
|
16
15
|
Classifier: Intended Audience :: End Users/Desktop
|
|
17
16
|
Classifier: Operating System :: POSIX
|
|
@@ -130,6 +130,7 @@ _set_new_action() {
|
|
|
130
130
|
# ${!x} -> ${hello} -> "world"
|
|
131
131
|
_shtab_streamlink_cli() {
|
|
132
132
|
local completing_word="${COMP_WORDS[COMP_CWORD]}"
|
|
133
|
+
local previous_word="${COMP_WORDS[COMP_CWORD-1]}"
|
|
133
134
|
local completed_positional_actions
|
|
134
135
|
local current_action
|
|
135
136
|
local current_action_args_start_index
|
|
@@ -186,6 +187,10 @@ _shtab_streamlink_cli() {
|
|
|
186
187
|
if [[ $pos_only = 0 && "${completing_word}" == -* ]]; then
|
|
187
188
|
# optional argument started: use option strings
|
|
188
189
|
COMPREPLY=( $(compgen -W "${current_option_strings[*]}" -- "${completing_word}") )
|
|
190
|
+
elif [[ "${previous_word}" == ">" || "${previous_word}" == ">>" ||
|
|
191
|
+
"${previous_word}" =~ ^[12]">" || "${previous_word}" =~ ^[12]">>" ]]; then
|
|
192
|
+
# handle redirection operators
|
|
193
|
+
COMPREPLY=( $(compgen -f -- "${completing_word}") )
|
|
189
194
|
else
|
|
190
195
|
# use choices & compgen
|
|
191
196
|
local IFS=$'\n' # items may contain spaces, so delimit using newline
|
|
@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
|
|
27
27
|
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
|
28
28
|
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
|
29
29
|
..
|
|
30
|
-
.TH "STREAMLINK" "1" "Apr
|
|
30
|
+
.TH "STREAMLINK" "1" "Apr 26, 2025" "7.3.0" "Streamlink"
|
|
31
31
|
.SH NAME
|
|
32
32
|
streamlink \- extracts streams from various services and pipes them into a video player of choice
|
|
33
33
|
.SH SYNOPSIS
|
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## streamlink 7.3.0 (2025-04-26)
|
|
4
|
+
|
|
5
|
+
- Changed: download progress to use the console output stream rather than always `stderr`, which previously caused log and progress messages to be interweaved ([#6497](https://github.com/streamlink/streamlink/pull/6497), [#6496](https://github.com/streamlink/streamlink/pull/6496))
|
|
6
|
+
- Changed: download progress output to be a status message line at the bottom of the console output, unless `--progress=force` is set in non-interactive or unsupported environments, in which case less frequent regular progress messages are written ([#6497](https://github.com/streamlink/streamlink/pull/6497), [#6496](https://github.com/streamlink/streamlink/pull/6496))
|
|
7
|
+
- Fixed: potential division by zero error when formatting progress output ([#6498](https://github.com/streamlink/streamlink/pull/6498))
|
|
8
|
+
- Build: bumped `setuptools` requirement from `>=65.6` to `>=77` and switched to PEP 639 project license metadata format ([#6502](https://github.com/streamlink/streamlink/pull/6502))
|
|
9
|
+
|
|
10
|
+
[Full changelog](https://github.com/streamlink/streamlink/compare/7.2.0...7.3.0)
|
|
11
|
+
|
|
12
|
+
|
|
3
13
|
## streamlink 7.2.0 (2025-04-04)
|
|
4
14
|
|
|
5
15
|
- Added: `decompress` extras marker to Streamlink's optional dependencies for installing `brotli` and `zstandard`, which were previously implied optional dependencies via the transitive dependency `urllib3` ([#6451](https://github.com/streamlink/streamlink/pull/6451))
|
|
@@ -122,7 +122,7 @@ performing these checks locally avoids unnecessary build failures.
|
|
|
122
122
|
Code style
|
|
123
123
|
----------
|
|
124
124
|
|
|
125
|
-
Streamlink uses `Ruff`_ as primary code `linting <Ruff-
|
|
125
|
+
Streamlink uses `Ruff`_ as primary code `linting <Ruff-linter_>`_ and `formatting <Ruff-formatter_>`_ tool.
|
|
126
126
|
|
|
127
127
|
The project aims to use best practices for achieving great code readability with minimal git diffs,
|
|
128
128
|
as detailed in :pep:`8` and implemented in related linting and formatting tools, such as `Black`_.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[build-system]
|
|
2
2
|
requires = [
|
|
3
|
-
"setuptools >=
|
|
3
|
+
"setuptools >=77",
|
|
4
4
|
"wheel",
|
|
5
5
|
# The versioningit build-requirement gets removed from the source distribution,
|
|
6
6
|
# as the version string is already built into it (see the onbuild versioningit hook):
|
|
@@ -20,14 +20,14 @@ description = """\
|
|
|
20
20
|
Streamlink is a command-line utility that extracts streams from various services and pipes them into a video player of choice.\
|
|
21
21
|
"""
|
|
22
22
|
readme = "README.md"
|
|
23
|
-
license =
|
|
23
|
+
license = "BSD-2-Clause"
|
|
24
|
+
license-files = ["LICENSE"]
|
|
24
25
|
authors = [
|
|
25
26
|
{ name = "Streamlink" },
|
|
26
27
|
{ email = "streamlink@protonmail.com" }
|
|
27
28
|
]
|
|
28
29
|
classifiers = [
|
|
29
30
|
"Development Status :: 5 - Production/Stable",
|
|
30
|
-
"License :: OSI Approved :: BSD License",
|
|
31
31
|
"Environment :: Console",
|
|
32
32
|
"Intended Audience :: End Users/Desktop",
|
|
33
33
|
"Operating System :: POSIX",
|
|
@@ -88,9 +88,6 @@ Funding = "https://streamlink.github.io/latest/support.html"
|
|
|
88
88
|
# https://setuptools.pypa.io/en/stable/userguide/pyproject_config.html
|
|
89
89
|
# https://setuptools.pypa.io/en/stable/userguide/package_discovery.html
|
|
90
90
|
# https://setuptools.pypa.io/en/stable/userguide/datafiles.html
|
|
91
|
-
[tool.setuptools]
|
|
92
|
-
license-files = ["LICENSE"]
|
|
93
|
-
|
|
94
91
|
[tool.setuptools.packages.find]
|
|
95
92
|
where = ["src"]
|
|
96
93
|
namespaces = false
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "7.3.0"
|
|
@@ -129,7 +129,11 @@ class TwitCasting(Plugin):
|
|
|
129
129
|
if websocket:
|
|
130
130
|
yield from self._get_streams_websocket(websocket)
|
|
131
131
|
if hls:
|
|
132
|
-
|
|
132
|
+
try:
|
|
133
|
+
yield from self._get_streams_hls(hls)
|
|
134
|
+
except OSError:
|
|
135
|
+
if not websocket:
|
|
136
|
+
raise
|
|
133
137
|
|
|
134
138
|
|
|
135
139
|
class TwitCastingWsClient(WebsocketClient):
|
|
@@ -1,17 +1,16 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: streamlink
|
|
3
|
-
Version: 7.
|
|
3
|
+
Version: 7.3.0
|
|
4
4
|
Summary: Streamlink is a command-line utility that extracts streams from various services and pipes them into a video player of choice.
|
|
5
5
|
Author: Streamlink
|
|
6
6
|
Author-email: streamlink@protonmail.com
|
|
7
|
-
License:
|
|
7
|
+
License-Expression: BSD-2-Clause
|
|
8
8
|
Project-URL: Homepage, https://github.com/streamlink/streamlink
|
|
9
9
|
Project-URL: Documentation, https://streamlink.github.io/
|
|
10
10
|
Project-URL: Tracker, https://github.com/streamlink/streamlink/issues
|
|
11
11
|
Project-URL: Source, https://github.com/streamlink/streamlink
|
|
12
12
|
Project-URL: Funding, https://streamlink.github.io/latest/support.html
|
|
13
13
|
Classifier: Development Status :: 5 - Production/Stable
|
|
14
|
-
Classifier: License :: OSI Approved :: BSD License
|
|
15
14
|
Classifier: Environment :: Console
|
|
16
15
|
Classifier: Intended Audience :: End Users/Desktop
|
|
17
16
|
Classifier: Operating System :: POSIX
|
|
@@ -314,13 +314,21 @@ src/streamlink_cli/__main__.py
|
|
|
314
314
|
src/streamlink_cli/_parser.py
|
|
315
315
|
src/streamlink_cli/argparser.py
|
|
316
316
|
src/streamlink_cli/compat.py
|
|
317
|
-
src/streamlink_cli/console.py
|
|
318
317
|
src/streamlink_cli/constants.py
|
|
319
318
|
src/streamlink_cli/exceptions.py
|
|
320
319
|
src/streamlink_cli/main.py
|
|
321
320
|
src/streamlink_cli/py.typed
|
|
322
321
|
src/streamlink_cli/show_matchers.py
|
|
323
322
|
src/streamlink_cli/streamrunner.py
|
|
323
|
+
src/streamlink_cli/console/__init__.py
|
|
324
|
+
src/streamlink_cli/console/console.py
|
|
325
|
+
src/streamlink_cli/console/progress.py
|
|
326
|
+
src/streamlink_cli/console/stream.py
|
|
327
|
+
src/streamlink_cli/console/stream_wrapper.py
|
|
328
|
+
src/streamlink_cli/console/stream_wrapper.pyi
|
|
329
|
+
src/streamlink_cli/console/terminal.py
|
|
330
|
+
src/streamlink_cli/console/user_input.py
|
|
331
|
+
src/streamlink_cli/console/windows.py
|
|
324
332
|
src/streamlink_cli/output/__init__.py
|
|
325
333
|
src/streamlink_cli/output/abc.py
|
|
326
334
|
src/streamlink_cli/output/file.py
|
|
@@ -330,7 +338,6 @@ src/streamlink_cli/utils/__init__.py
|
|
|
330
338
|
src/streamlink_cli/utils/formatter.py
|
|
331
339
|
src/streamlink_cli/utils/path.py
|
|
332
340
|
src/streamlink_cli/utils/player.py
|
|
333
|
-
src/streamlink_cli/utils/progress.py
|
|
334
341
|
src/streamlink_cli/utils/versioncheck.py
|
|
335
342
|
tests/__init__.py
|
|
336
343
|
tests/conftest.py
|
|
@@ -348,8 +355,14 @@ tests/test_validate.py
|
|
|
348
355
|
tests/cli/__init__.py
|
|
349
356
|
tests/cli/test_argparser.py
|
|
350
357
|
tests/cli/test_compat.py
|
|
351
|
-
tests/cli/test_console.py
|
|
352
358
|
tests/cli/test_streamrunner.py
|
|
359
|
+
tests/cli/console/__init__.py
|
|
360
|
+
tests/cli/console/test_console.py
|
|
361
|
+
tests/cli/console/test_progress.py
|
|
362
|
+
tests/cli/console/test_stream.py
|
|
363
|
+
tests/cli/console/test_stream_wrapper.py
|
|
364
|
+
tests/cli/console/test_terminal.py
|
|
365
|
+
tests/cli/console/test_windows.py
|
|
353
366
|
tests/cli/main/__init__.py
|
|
354
367
|
tests/cli/main/conftest.py
|
|
355
368
|
tests/cli/main/test_can_handle_url.py
|
|
@@ -372,7 +385,6 @@ tests/cli/utils/__init__.py
|
|
|
372
385
|
tests/cli/utils/test_formatter.py
|
|
373
386
|
tests/cli/utils/test_path.py
|
|
374
387
|
tests/cli/utils/test_player.py
|
|
375
|
-
tests/cli/utils/test_progress.py
|
|
376
388
|
tests/cli/utils/test_versioncheck.py
|
|
377
389
|
tests/mixins/__init__.py
|
|
378
390
|
tests/mixins/stream_hls.py
|
{streamlink-7.2.0/src/streamlink_cli → streamlink-7.3.0/src/streamlink_cli/console}/console.py
RENAMED
|
@@ -6,44 +6,31 @@ from getpass import getpass
|
|
|
6
6
|
from json import dumps
|
|
7
7
|
from typing import Any, TextIO
|
|
8
8
|
|
|
9
|
-
from
|
|
9
|
+
from streamlink_cli.console.stream import ConsoleOutputStream, ConsoleStatusMessage
|
|
10
10
|
from streamlink_cli.utils import JSONEncoder
|
|
11
11
|
|
|
12
12
|
|
|
13
|
-
class ConsoleUserInputRequester(UserInputRequester):
|
|
14
|
-
"""
|
|
15
|
-
Request input from the user on the console using the standard ask/askpass methods
|
|
16
|
-
"""
|
|
17
|
-
|
|
18
|
-
def __init__(self, console: ConsoleOutput):
|
|
19
|
-
self.console = console
|
|
20
|
-
|
|
21
|
-
def ask(self, prompt: str) -> str:
|
|
22
|
-
return self.console.ask(f"{prompt.strip()}: ")
|
|
23
|
-
|
|
24
|
-
def ask_password(self, prompt: str) -> str:
|
|
25
|
-
return self.console.ask_password(f"{prompt.strip()}: ")
|
|
26
|
-
|
|
27
|
-
|
|
28
13
|
class ConsoleOutput:
|
|
29
14
|
def __init__(
|
|
30
15
|
self,
|
|
31
16
|
*,
|
|
32
|
-
console_output:
|
|
17
|
+
console_output: ConsoleOutputStream | None = None,
|
|
33
18
|
file_output: TextIO | None = None,
|
|
34
19
|
json: bool = False,
|
|
35
20
|
):
|
|
36
21
|
self.json: bool = json
|
|
37
|
-
self._console_output:
|
|
22
|
+
self._console_output: ConsoleOutputStream | None = console_output
|
|
23
|
+
self._supports_status_messages: bool = console_output is not None and console_output.supports_status_messages()
|
|
38
24
|
self._file_output: TextIO | None = file_output
|
|
39
25
|
|
|
40
26
|
@property
|
|
41
|
-
def console_output(self) ->
|
|
27
|
+
def console_output(self) -> ConsoleOutputStream | None:
|
|
42
28
|
return self._console_output
|
|
43
29
|
|
|
44
30
|
@console_output.setter
|
|
45
|
-
def console_output(self, console_output:
|
|
31
|
+
def console_output(self, console_output: ConsoleOutputStream | None) -> None:
|
|
46
32
|
self._console_output = console_output
|
|
33
|
+
self._supports_status_messages = console_output is not None and console_output.supports_status_messages()
|
|
47
34
|
|
|
48
35
|
@property
|
|
49
36
|
def file_output(self) -> TextIO | None:
|
|
@@ -56,14 +43,34 @@ class ConsoleOutput:
|
|
|
56
43
|
else:
|
|
57
44
|
self._file_output = file_output
|
|
58
45
|
|
|
46
|
+
def supports_status_messages(self) -> bool:
|
|
47
|
+
return self._supports_status_messages
|
|
48
|
+
|
|
49
|
+
def close(self):
|
|
50
|
+
if self._console_output: # pragma: no branch
|
|
51
|
+
with suppress(OSError):
|
|
52
|
+
self._console_output.close()
|
|
53
|
+
self._console_output.restore()
|
|
54
|
+
if self._file_output: # pragma: no branch
|
|
55
|
+
with suppress(OSError):
|
|
56
|
+
self._file_output.close()
|
|
57
|
+
|
|
59
58
|
@staticmethod
|
|
60
|
-
def _write(stream: TextIO
|
|
61
|
-
if stream is None:
|
|
62
|
-
return
|
|
59
|
+
def _write(stream: TextIO, msg: str):
|
|
63
60
|
with suppress(OSError):
|
|
64
61
|
stream.write(msg)
|
|
65
62
|
stream.flush()
|
|
66
63
|
|
|
64
|
+
def _write_console(self, msg: str):
|
|
65
|
+
if self._console_output is None:
|
|
66
|
+
return
|
|
67
|
+
self._write(self._console_output, msg)
|
|
68
|
+
|
|
69
|
+
def _write_file(self, msg: str):
|
|
70
|
+
if self._file_output is None:
|
|
71
|
+
return
|
|
72
|
+
self._write(self._file_output, msg)
|
|
73
|
+
|
|
67
74
|
@contextmanager
|
|
68
75
|
def _prompt(self):
|
|
69
76
|
if not sys.stdin or not sys.stdin.isatty():
|
|
@@ -80,7 +87,7 @@ class ConsoleOutput:
|
|
|
80
87
|
|
|
81
88
|
def ask(self, prompt: str) -> str:
|
|
82
89
|
with self._prompt():
|
|
83
|
-
self.
|
|
90
|
+
self._write_console(prompt)
|
|
84
91
|
return input().strip()
|
|
85
92
|
|
|
86
93
|
def ask_password(self, prompt: str) -> str:
|
|
@@ -91,8 +98,13 @@ class ConsoleOutput:
|
|
|
91
98
|
if self.json:
|
|
92
99
|
return
|
|
93
100
|
msg = f"{msg}\n"
|
|
94
|
-
self.
|
|
95
|
-
self.
|
|
101
|
+
self._write_console(msg)
|
|
102
|
+
self._write_file(msg)
|
|
103
|
+
|
|
104
|
+
def msg_status(self, msg: str) -> None:
|
|
105
|
+
if self.json or not self._supports_status_messages:
|
|
106
|
+
return
|
|
107
|
+
self._write_console(ConsoleStatusMessage(msg))
|
|
96
108
|
|
|
97
109
|
def msg_json(self, *objs: Any, **keywords: Any) -> None:
|
|
98
110
|
if not self.json:
|
|
@@ -124,11 +136,8 @@ class ConsoleOutput:
|
|
|
124
136
|
# don't escape Unicode characters outside the ASCII range if the output encoding is UTF-8
|
|
125
137
|
ensure_ascii = self._console_output.encoding != "utf-8"
|
|
126
138
|
msg = dumps(out, cls=JSONEncoder, ensure_ascii=ensure_ascii, indent=2)
|
|
127
|
-
self.
|
|
139
|
+
self._write_console(f"{msg}\n")
|
|
128
140
|
|
|
129
141
|
if self._file_output is not None:
|
|
130
142
|
msg = dumps(out, cls=JSONEncoder, ensure_ascii=False, indent=2)
|
|
131
143
|
self._write(self._file_output, f"{msg}\n")
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
__all__ = ["ConsoleOutput", "ConsoleUserInputRequester"]
|
|
@@ -5,13 +5,13 @@ from collections import deque
|
|
|
5
5
|
from collections.abc import Callable, Iterable, Mapping
|
|
6
6
|
from math import floor
|
|
7
7
|
from pathlib import PurePath
|
|
8
|
-
from shutil import get_terminal_size
|
|
9
8
|
from string import Formatter as StringFormatter
|
|
10
9
|
from threading import Event, RLock, Thread
|
|
11
10
|
from time import time
|
|
12
|
-
from typing import TYPE_CHECKING
|
|
11
|
+
from typing import TYPE_CHECKING
|
|
13
12
|
|
|
14
|
-
from
|
|
13
|
+
from streamlink_cli.console.console import ConsoleOutput
|
|
14
|
+
from streamlink_cli.console.terminal import cut_text, term_width, text_width
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
if TYPE_CHECKING:
|
|
@@ -49,82 +49,9 @@ class ProgressFormatter:
|
|
|
49
49
|
# Use U+2026 (HORIZONTAL ELLIPSIS) to be able to distinguish between "." and ".." when truncating relative paths
|
|
50
50
|
ELLIPSIS: str = "…"
|
|
51
51
|
|
|
52
|
-
# widths generated from
|
|
53
|
-
# https://www.unicode.org/Public/4.0-Update/EastAsianWidth-4.0.0.txt
|
|
54
|
-
# See https://github.com/streamlink/streamlink/pull/2032
|
|
55
|
-
WIDTHS: Iterable[tuple[int, int]] = (
|
|
56
|
-
(13, 1),
|
|
57
|
-
(15, 0),
|
|
58
|
-
(126, 1),
|
|
59
|
-
(159, 0),
|
|
60
|
-
(687, 1),
|
|
61
|
-
(710, 0),
|
|
62
|
-
(711, 1),
|
|
63
|
-
(727, 0),
|
|
64
|
-
(733, 1),
|
|
65
|
-
(879, 0),
|
|
66
|
-
(1154, 1),
|
|
67
|
-
(1161, 0),
|
|
68
|
-
(4347, 1),
|
|
69
|
-
(4447, 2),
|
|
70
|
-
(7467, 1),
|
|
71
|
-
(7521, 0),
|
|
72
|
-
(8369, 1),
|
|
73
|
-
(8426, 0),
|
|
74
|
-
(9000, 1),
|
|
75
|
-
(9002, 2),
|
|
76
|
-
(11021, 1),
|
|
77
|
-
(12350, 2),
|
|
78
|
-
(12351, 1),
|
|
79
|
-
(12438, 2),
|
|
80
|
-
(12442, 0),
|
|
81
|
-
(19893, 2),
|
|
82
|
-
(19967, 1),
|
|
83
|
-
(55203, 2),
|
|
84
|
-
(63743, 1),
|
|
85
|
-
(64106, 2),
|
|
86
|
-
(65039, 1),
|
|
87
|
-
(65059, 0),
|
|
88
|
-
(65131, 2),
|
|
89
|
-
(65279, 1),
|
|
90
|
-
(65376, 2),
|
|
91
|
-
(65500, 1),
|
|
92
|
-
(65510, 2),
|
|
93
|
-
(120831, 1),
|
|
94
|
-
(262141, 2),
|
|
95
|
-
(1114109, 1),
|
|
96
|
-
)
|
|
97
|
-
|
|
98
|
-
# On Windows, we need one less space, or we overflow the line for some reason.
|
|
99
|
-
gap = 1 if is_win32 else 0
|
|
100
|
-
|
|
101
|
-
@classmethod
|
|
102
|
-
def term_width(cls):
|
|
103
|
-
return get_terminal_size().columns - cls.gap
|
|
104
|
-
|
|
105
|
-
@classmethod
|
|
106
|
-
def _get_width(cls, ordinal: int) -> int:
|
|
107
|
-
"""Return the width of a specific unicode character when it would be displayed."""
|
|
108
|
-
return next((width for unicode, width in cls.WIDTHS if ordinal <= unicode), 1)
|
|
109
|
-
|
|
110
|
-
@classmethod
|
|
111
|
-
def width(cls, value: str):
|
|
112
|
-
"""Return the overall width of a string when it would be displayed."""
|
|
113
|
-
return sum(map(cls._get_width, map(ord, value)))
|
|
114
|
-
|
|
115
|
-
@classmethod
|
|
116
|
-
def cut(cls, value: str, max_width: int) -> str:
|
|
117
|
-
"""Cut off the beginning of a string until its display width fits into the output size."""
|
|
118
|
-
current = value
|
|
119
|
-
for i in range(len(value)): # pragma: no branch
|
|
120
|
-
current = value[i:]
|
|
121
|
-
if cls.width(current) <= max_width:
|
|
122
|
-
break
|
|
123
|
-
return current
|
|
124
|
-
|
|
125
52
|
@classmethod
|
|
126
53
|
def format(cls, formats: _TFormat, params: Mapping[str, str | Callable[[int], str]]) -> str:
|
|
127
|
-
|
|
54
|
+
width = term_width()
|
|
128
55
|
static: list[str] = []
|
|
129
56
|
variable: list[tuple[int, Callable[[int], str], int]] = []
|
|
130
57
|
|
|
@@ -151,13 +78,13 @@ class ProgressFormatter:
|
|
|
151
78
|
else:
|
|
152
79
|
# No variable segments? Just check if the resulting string fits into the size constraints.
|
|
153
80
|
if not variable:
|
|
154
|
-
if length >
|
|
81
|
+
if length > width:
|
|
155
82
|
continue
|
|
156
83
|
else:
|
|
157
84
|
break
|
|
158
85
|
|
|
159
86
|
# Get the available space for each variable segment (share space equally and round down).
|
|
160
|
-
max_width = int((
|
|
87
|
+
max_width = int((width - length) / len(variable))
|
|
161
88
|
# If at least one variable segment doesn't fit, continue with the next format.
|
|
162
89
|
if max_width < 1 or any(max_width < min_width for _, __, min_width in variable):
|
|
163
90
|
continue
|
|
@@ -204,17 +131,17 @@ class ProgressFormatter:
|
|
|
204
131
|
def format_path(cls, path: PurePath, max_width: int) -> str:
|
|
205
132
|
# Quick check if the path fits
|
|
206
133
|
string = str(path)
|
|
207
|
-
width =
|
|
134
|
+
width = text_width(string)
|
|
208
135
|
if width <= max_width:
|
|
209
136
|
return string
|
|
210
137
|
|
|
211
138
|
# Since the path doesn't fit, we always need to add an ellipsis.
|
|
212
139
|
# On Windows, we also need to add the "drive" part (which is an empty string on PurePosixPath)
|
|
213
|
-
max_width -=
|
|
140
|
+
max_width -= text_width(path.drive) + text_width(cls.ELLIPSIS)
|
|
214
141
|
|
|
215
142
|
# Ignore the path's first part, aka the "anchor" (drive + root)
|
|
216
143
|
parts = os.path.sep.join(path.parts[1:] if path.drive else path.parts)
|
|
217
|
-
truncated =
|
|
144
|
+
truncated = cut_text(parts, max_width)
|
|
218
145
|
|
|
219
146
|
return f"{path.drive}{cls.ELLIPSIS}{truncated}"
|
|
220
147
|
|
|
@@ -222,15 +149,15 @@ class ProgressFormatter:
|
|
|
222
149
|
class Progress(Thread):
|
|
223
150
|
def __init__(
|
|
224
151
|
self,
|
|
225
|
-
|
|
152
|
+
console: ConsoleOutput,
|
|
226
153
|
path: PurePath,
|
|
227
154
|
interval: float = 0.25,
|
|
228
155
|
history: int = 20,
|
|
229
156
|
threshold: int = 2,
|
|
157
|
+
status: bool = True,
|
|
230
158
|
):
|
|
231
159
|
"""
|
|
232
|
-
:param
|
|
233
|
-
:param path: The path that's being written
|
|
160
|
+
:param console: The console output
|
|
234
161
|
:param interval: Time in seconds between updates
|
|
235
162
|
:param history: Number of seconds of how long download speed history is kept
|
|
236
163
|
:param threshold: Number of seconds until download speed is shown
|
|
@@ -242,7 +169,7 @@ class Progress(Thread):
|
|
|
242
169
|
|
|
243
170
|
self.formatter = ProgressFormatter()
|
|
244
171
|
|
|
245
|
-
self.
|
|
172
|
+
self.console: ConsoleOutput = console
|
|
246
173
|
self.path: PurePath = path
|
|
247
174
|
self.interval: float = interval
|
|
248
175
|
self.history: deque[tuple[float, int]] = deque(maxlen=int(history / interval))
|
|
@@ -251,6 +178,7 @@ class Progress(Thread):
|
|
|
251
178
|
self.started: float = 0.0
|
|
252
179
|
self.overall: int = 0
|
|
253
180
|
self.written: int = 0
|
|
181
|
+
self.status: bool = status
|
|
254
182
|
|
|
255
183
|
def close(self):
|
|
256
184
|
self._wait.set()
|
|
@@ -268,7 +196,6 @@ class Progress(Thread):
|
|
|
268
196
|
self.update()
|
|
269
197
|
finally:
|
|
270
198
|
self.update()
|
|
271
|
-
self.print_end()
|
|
272
199
|
|
|
273
200
|
def update(self):
|
|
274
201
|
with self._lock:
|
|
@@ -280,7 +207,7 @@ class Progress(Thread):
|
|
|
280
207
|
self.written = 0
|
|
281
208
|
|
|
282
209
|
has_history = len(history) >= self.threshold
|
|
283
|
-
if not has_history:
|
|
210
|
+
if not has_history or now == history[0][0]:
|
|
284
211
|
formats = formatter.FORMATS_NOSPEED
|
|
285
212
|
speed = ""
|
|
286
213
|
else:
|
|
@@ -295,17 +222,7 @@ class Progress(Thread):
|
|
|
295
222
|
)
|
|
296
223
|
|
|
297
224
|
status = formatter.format(formats, params)
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
"""Clears the previous line and prints a new one."""
|
|
303
|
-
term_width = self.formatter.term_width()
|
|
304
|
-
spacing = term_width - self.formatter.width(msg)
|
|
305
|
-
|
|
306
|
-
self.stream.write(f"\r{msg}{' ' * max(0, spacing)}")
|
|
307
|
-
self.stream.flush()
|
|
308
|
-
|
|
309
|
-
def print_end(self):
|
|
310
|
-
self.stream.write("\n")
|
|
311
|
-
self.stream.flush()
|
|
225
|
+
if self.status:
|
|
226
|
+
self.console.msg_status(status)
|
|
227
|
+
else:
|
|
228
|
+
self.console.msg(status)
|