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.
Files changed (621) hide show
  1. {streamlink-7.2.0 → streamlink-7.3.0}/CHANGELOG.md +10 -0
  2. {streamlink-7.2.0 → streamlink-7.3.0}/PKG-INFO +2 -3
  3. {streamlink-7.2.0 → streamlink-7.3.0}/completions/bash/streamlink +5 -0
  4. {streamlink-7.2.0 → streamlink-7.3.0}/dev-requirements.txt +1 -1
  5. {streamlink-7.2.0 → streamlink-7.3.0}/docs/_build/man/streamlink.1 +1 -1
  6. {streamlink-7.2.0 → streamlink-7.3.0}/docs/changelog.md +10 -0
  7. {streamlink-7.2.0 → streamlink-7.3.0}/docs/developing.rst +1 -1
  8. {streamlink-7.2.0 → streamlink-7.3.0}/pyproject.toml +3 -6
  9. {streamlink-7.2.0 → streamlink-7.3.0}/setup.py +1 -1
  10. streamlink-7.3.0/src/streamlink/_version.py +1 -0
  11. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/twitcasting.py +5 -1
  12. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/validate/__init__.py +1 -1
  13. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink.egg-info/PKG-INFO +2 -3
  14. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink.egg-info/SOURCES.txt +16 -4
  15. streamlink-7.3.0/src/streamlink_cli/console/__init__.py +3 -0
  16. {streamlink-7.2.0/src/streamlink_cli → streamlink-7.3.0/src/streamlink_cli/console}/console.py +39 -30
  17. {streamlink-7.2.0/src/streamlink_cli/utils → streamlink-7.3.0/src/streamlink_cli/console}/progress.py +19 -102
  18. streamlink-7.3.0/src/streamlink_cli/console/stream.py +163 -0
  19. streamlink-7.3.0/src/streamlink_cli/console/stream_wrapper.py +37 -0
  20. streamlink-7.3.0/src/streamlink_cli/console/stream_wrapper.pyi +14 -0
  21. streamlink-7.3.0/src/streamlink_cli/console/terminal.py +79 -0
  22. streamlink-7.3.0/src/streamlink_cli/console/user_input.py +17 -0
  23. streamlink-7.3.0/src/streamlink_cli/console/windows.py +200 -0
  24. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink_cli/constants.py +3 -0
  25. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink_cli/main.py +55 -18
  26. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink_cli/streamrunner.py +7 -22
  27. {streamlink-7.2.0/tests/cli → streamlink-7.3.0/tests/cli/console}/test_console.py +84 -29
  28. {streamlink-7.2.0/tests/cli/utils → streamlink-7.3.0/tests/cli/console}/test_progress.py +45 -78
  29. streamlink-7.3.0/tests/cli/console/test_stream.py +386 -0
  30. streamlink-7.3.0/tests/cli/console/test_stream_wrapper.py +58 -0
  31. streamlink-7.3.0/tests/cli/console/test_terminal.py +46 -0
  32. streamlink-7.3.0/tests/cli/console/test_windows.py +181 -0
  33. {streamlink-7.2.0 → streamlink-7.3.0}/tests/cli/main/conftest.py +16 -0
  34. {streamlink-7.2.0 → streamlink-7.3.0}/tests/cli/main/test_logging.py +28 -48
  35. streamlink-7.3.0/tests/cli/main/test_output_stream.py +197 -0
  36. {streamlink-7.2.0 → streamlink-7.3.0}/tests/cli/test_streamrunner.py +31 -104
  37. streamlink-7.3.0/tests/webbrowser/__init__.py +0 -0
  38. streamlink-7.2.0/src/streamlink/_version.py +0 -1
  39. streamlink-7.2.0/tests/cli/main/test_output_stream.py +0 -102
  40. {streamlink-7.2.0 → streamlink-7.3.0}/AUTHORS +0 -0
  41. {streamlink-7.2.0 → streamlink-7.3.0}/LICENSE +0 -0
  42. {streamlink-7.2.0 → streamlink-7.3.0}/MANIFEST.in +0 -0
  43. {streamlink-7.2.0 → streamlink-7.3.0}/README.md +0 -0
  44. {streamlink-7.2.0 → streamlink-7.3.0}/build_backend/__init__.py +0 -0
  45. {streamlink-7.2.0 → streamlink-7.3.0}/build_backend/commands.py +0 -0
  46. {streamlink-7.2.0 → streamlink-7.3.0}/build_backend/onbuild.py +0 -0
  47. {streamlink-7.2.0 → streamlink-7.3.0}/build_backend/plugins_json.py +0 -0
  48. {streamlink-7.2.0 → streamlink-7.3.0}/build_backend/test_build_backend.py +0 -0
  49. {streamlink-7.2.0 → streamlink-7.3.0}/build_backend/test_onbuild.py +0 -0
  50. {streamlink-7.2.0 → streamlink-7.3.0}/build_backend/test_plugins_json.py +0 -0
  51. {streamlink-7.2.0 → streamlink-7.3.0}/completions/zsh/_streamlink +0 -0
  52. {streamlink-7.2.0 → streamlink-7.3.0}/docs/Makefile +0 -0
  53. {streamlink-7.2.0 → streamlink-7.3.0}/docs/_man.rst +0 -0
  54. {streamlink-7.2.0 → streamlink-7.3.0}/docs/_static/apple-touch-icon.png +0 -0
  55. {streamlink-7.2.0 → streamlink-7.3.0}/docs/_static/favicon-16x16.png +0 -0
  56. {streamlink-7.2.0 → streamlink-7.3.0}/docs/_static/favicon-32x32.png +0 -0
  57. {streamlink-7.2.0 → streamlink-7.3.0}/docs/_static/favicon.ico +0 -0
  58. {streamlink-7.2.0 → streamlink-7.3.0}/docs/_static/icon-ffmpeg.svg +0 -0
  59. {streamlink-7.2.0 → streamlink-7.3.0}/docs/_static/icon-python.svg +0 -0
  60. {streamlink-7.2.0 → streamlink-7.3.0}/docs/_static/icon.svg +0 -0
  61. {streamlink-7.2.0 → streamlink-7.3.0}/docs/_static/opengraph-image.png +0 -0
  62. {streamlink-7.2.0 → streamlink-7.3.0}/docs/_static/site.webmanifest +0 -0
  63. {streamlink-7.2.0 → streamlink-7.3.0}/docs/_static/styles/custom.css +0 -0
  64. {streamlink-7.2.0 → streamlink-7.3.0}/docs/_templates/base.html +0 -0
  65. {streamlink-7.2.0 → streamlink-7.3.0}/docs/_templates/page.html +0 -0
  66. {streamlink-7.2.0 → streamlink-7.3.0}/docs/_templates/sidebar/brand.html +0 -0
  67. {streamlink-7.2.0 → streamlink-7.3.0}/docs/_templates/sidebar/github-buttons.html +0 -0
  68. {streamlink-7.2.0 → streamlink-7.3.0}/docs/api/cache.rst +0 -0
  69. {streamlink-7.2.0 → streamlink-7.3.0}/docs/api/exceptions.rst +0 -0
  70. {streamlink-7.2.0 → streamlink-7.3.0}/docs/api/options.rst +0 -0
  71. {streamlink-7.2.0 → streamlink-7.3.0}/docs/api/plugin.rst +0 -0
  72. {streamlink-7.2.0 → streamlink-7.3.0}/docs/api/session.rst +0 -0
  73. {streamlink-7.2.0 → streamlink-7.3.0}/docs/api/stream.rst +0 -0
  74. {streamlink-7.2.0 → streamlink-7.3.0}/docs/api/streamlink.rst +0 -0
  75. {streamlink-7.2.0 → streamlink-7.3.0}/docs/api/validate.rst +0 -0
  76. {streamlink-7.2.0 → streamlink-7.3.0}/docs/api/webbrowser.rst +0 -0
  77. {streamlink-7.2.0 → streamlink-7.3.0}/docs/api.rst +0 -0
  78. {streamlink-7.2.0 → streamlink-7.3.0}/docs/api_guide/quickstart.rst +0 -0
  79. {streamlink-7.2.0 → streamlink-7.3.0}/docs/api_guide/validate.rst +0 -0
  80. {streamlink-7.2.0 → streamlink-7.3.0}/docs/api_guide.rst +0 -0
  81. {streamlink-7.2.0 → streamlink-7.3.0}/docs/applications.rst +0 -0
  82. {streamlink-7.2.0 → streamlink-7.3.0}/docs/cli/config.rst +0 -0
  83. {streamlink-7.2.0 → streamlink-7.3.0}/docs/cli/metadata.rst +0 -0
  84. {streamlink-7.2.0 → streamlink-7.3.0}/docs/cli/plugin-sideloading.rst +0 -0
  85. {streamlink-7.2.0 → streamlink-7.3.0}/docs/cli/plugins/twitch.rst +0 -0
  86. {streamlink-7.2.0 → streamlink-7.3.0}/docs/cli/plugins.rst +0 -0
  87. {streamlink-7.2.0 → streamlink-7.3.0}/docs/cli/protocols.rst +0 -0
  88. {streamlink-7.2.0 → streamlink-7.3.0}/docs/cli/proxy.rst +0 -0
  89. {streamlink-7.2.0 → streamlink-7.3.0}/docs/cli/tutorial.rst +0 -0
  90. {streamlink-7.2.0 → streamlink-7.3.0}/docs/cli.rst +0 -0
  91. {streamlink-7.2.0 → streamlink-7.3.0}/docs/conf.py +0 -0
  92. {streamlink-7.2.0 → streamlink-7.3.0}/docs/deprecations.rst +0 -0
  93. {streamlink-7.2.0 → streamlink-7.3.0}/docs/docutils.conf +0 -0
  94. {streamlink-7.2.0 → streamlink-7.3.0}/docs/ext_argparse.py +0 -0
  95. {streamlink-7.2.0 → streamlink-7.3.0}/docs/ext_github.py +0 -0
  96. {streamlink-7.2.0 → streamlink-7.3.0}/docs/ext_html_template_vars.py +0 -0
  97. {streamlink-7.2.0 → streamlink-7.3.0}/docs/ext_plugins.py +0 -0
  98. {streamlink-7.2.0 → streamlink-7.3.0}/docs/ext_releaseref.py +0 -0
  99. {streamlink-7.2.0 → streamlink-7.3.0}/docs/index.rst +0 -0
  100. {streamlink-7.2.0 → streamlink-7.3.0}/docs/install.rst +0 -0
  101. {streamlink-7.2.0 → streamlink-7.3.0}/docs/migrations.rst +0 -0
  102. {streamlink-7.2.0 → streamlink-7.3.0}/docs/players.rst +0 -0
  103. {streamlink-7.2.0 → streamlink-7.3.0}/docs/plugins.rst +0 -0
  104. {streamlink-7.2.0 → streamlink-7.3.0}/docs/support.rst +0 -0
  105. {streamlink-7.2.0 → streamlink-7.3.0}/docs/thirdparty.rst +0 -0
  106. {streamlink-7.2.0 → streamlink-7.3.0}/docs-requirements.txt +0 -0
  107. {streamlink-7.2.0 → streamlink-7.3.0}/icon.svg +0 -0
  108. {streamlink-7.2.0 → streamlink-7.3.0}/script/build-shell-completions.sh +0 -0
  109. {streamlink-7.2.0 → streamlink-7.3.0}/setup.cfg +0 -0
  110. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/__init__.py +0 -0
  111. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/__main__.py +0 -0
  112. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/api.py +0 -0
  113. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/buffers.py +0 -0
  114. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/cache.py +0 -0
  115. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/compat.py +0 -0
  116. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/exceptions.py +0 -0
  117. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/logger.py +0 -0
  118. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/options.py +0 -0
  119. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/packages/__init__.py +0 -0
  120. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/packages/requests_file.py +0 -0
  121. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugin/__init__.py +0 -0
  122. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugin/api/__init__.py +0 -0
  123. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugin/api/useragents.py +0 -0
  124. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugin/api/validate.py +0 -0
  125. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugin/api/webbrowser/__init__.py +0 -0
  126. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugin/api/webbrowser/aws_waf.py +0 -0
  127. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugin/api/websocket.py +0 -0
  128. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugin/plugin.py +0 -0
  129. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/__init__.py +0 -0
  130. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/abematv.py +0 -0
  131. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/adultswim.py +0 -0
  132. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/albavision.py +0 -0
  133. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/aloula.py +0 -0
  134. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/app17.py +0 -0
  135. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/ard_live.py +0 -0
  136. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/ard_mediathek.py +0 -0
  137. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/artetv.py +0 -0
  138. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/atpchallenger.py +0 -0
  139. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/atresplayer.py +0 -0
  140. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/bbciplayer.py +0 -0
  141. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/bfmtv.py +0 -0
  142. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/bigo.py +0 -0
  143. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/bilibili.py +0 -0
  144. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/blazetv.py +0 -0
  145. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/bloomberg.py +0 -0
  146. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/brightcove.py +0 -0
  147. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/btv.py +0 -0
  148. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/cbsnews.py +0 -0
  149. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/cdnbg.py +0 -0
  150. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/ceskatelevize.py +0 -0
  151. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/chzzk.py +0 -0
  152. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/cinergroup.py +0 -0
  153. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/clubbingtv.py +0 -0
  154. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/cmmedia.py +0 -0
  155. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/cnbce.py +0 -0
  156. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/cnews.py +0 -0
  157. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/dailymotion.py +0 -0
  158. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/dash.py +0 -0
  159. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/delfi.py +0 -0
  160. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/deutschewelle.py +0 -0
  161. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/dlive.py +0 -0
  162. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/dogan.py +0 -0
  163. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/dogus.py +0 -0
  164. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/douyin.py +0 -0
  165. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/drdk.py +0 -0
  166. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/earthcam.py +0 -0
  167. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/euronews.py +0 -0
  168. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/filmon.py +0 -0
  169. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/goltelevision.py +0 -0
  170. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/goodgame.py +0 -0
  171. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/googledrive.py +0 -0
  172. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/gulli.py +0 -0
  173. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/hiplayer.py +0 -0
  174. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/hls.py +0 -0
  175. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/http.py +0 -0
  176. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/htv.py +0 -0
  177. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/huajiao.py +0 -0
  178. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/huya.py +0 -0
  179. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/indihometv.py +0 -0
  180. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/invintus.py +0 -0
  181. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/kick.py +0 -0
  182. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/kugou.py +0 -0
  183. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/livestream.py +0 -0
  184. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/lnk.py +0 -0
  185. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/lrt.py +0 -0
  186. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/ltv_lsm_lv.py +0 -0
  187. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/mangomolo.py +0 -0
  188. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/mdstrm.py +0 -0
  189. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/mediaklikk.py +0 -0
  190. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/mediavitrina.py +0 -0
  191. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/mitele.py +0 -0
  192. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/mixcloud.py +0 -0
  193. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/mjunoon.py +0 -0
  194. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/mrtmk.py +0 -0
  195. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/n13tv.py +0 -0
  196. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/nasaplus.py +0 -0
  197. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/nhkworld.py +0 -0
  198. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/nicolive.py +0 -0
  199. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/nimotv.py +0 -0
  200. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/nos.py +0 -0
  201. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/nrk.py +0 -0
  202. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/okru.py +0 -0
  203. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/olympicchannel.py +0 -0
  204. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/oneplusone.py +0 -0
  205. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/onetv.py +0 -0
  206. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/openrectv.py +0 -0
  207. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/pandalive.py +0 -0
  208. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/piaulizaportal.py +0 -0
  209. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/picarto.py +0 -0
  210. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/piczel.py +0 -0
  211. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/pixiv.py +0 -0
  212. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/pluto.py +0 -0
  213. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/pluzz.py +0 -0
  214. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/radiko.py +0 -0
  215. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/raiplay.py +0 -0
  216. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/reuters.py +0 -0
  217. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/rtpa.py +0 -0
  218. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/rtpplay.py +0 -0
  219. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/rtve.py +0 -0
  220. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/rtvs.py +0 -0
  221. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/ruv.py +0 -0
  222. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/sbscokr.py +0 -0
  223. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/showroom.py +0 -0
  224. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/soop.py +0 -0
  225. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/sportal.py +0 -0
  226. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/sportschau.py +0 -0
  227. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/ssh101.py +0 -0
  228. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/stadium.py +0 -0
  229. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/steam.py +0 -0
  230. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/streann.py +0 -0
  231. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/stv.py +0 -0
  232. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/svtplay.py +0 -0
  233. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/swisstxt.py +0 -0
  234. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/telefe.py +0 -0
  235. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/telemadrid.py +0 -0
  236. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/tf1.py +0 -0
  237. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/tiktok.py +0 -0
  238. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/trovo.py +0 -0
  239. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/turkuvaz.py +0 -0
  240. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/tv360.py +0 -0
  241. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/tv3cat.py +0 -0
  242. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/tv5monde.py +0 -0
  243. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/tv8.py +0 -0
  244. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/tv999.py +0 -0
  245. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/tvibo.py +0 -0
  246. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/tviplayer.py +0 -0
  247. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/tvp.py +0 -0
  248. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/tvtoya.py +0 -0
  249. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/twitch.py +0 -0
  250. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/ustreamtv.py +0 -0
  251. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/ustvnow.py +0 -0
  252. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/vidio.py +0 -0
  253. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/vimeo.py +0 -0
  254. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/vinhlongtv.py +0 -0
  255. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/vk.py +0 -0
  256. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/vkvideo.py +0 -0
  257. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/vtvgo.py +0 -0
  258. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/welt.py +0 -0
  259. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/wwenetwork.py +0 -0
  260. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/youtube.py +0 -0
  261. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/yupptv.py +0 -0
  262. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/zattoo.py +0 -0
  263. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/zdf_mediathek.py +0 -0
  264. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/plugins/zeenews.py +0 -0
  265. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/py.typed +0 -0
  266. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/session/__init__.py +0 -0
  267. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/session/http.py +0 -0
  268. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/session/http.pyi +0 -0
  269. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/session/http_useragents.py +0 -0
  270. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/session/options.py +0 -0
  271. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/session/plugins.py +0 -0
  272. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/session/session.py +0 -0
  273. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/stream/__init__.py +0 -0
  274. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/stream/dash/__init__.py +0 -0
  275. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/stream/dash/dash.py +0 -0
  276. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/stream/dash/manifest.py +0 -0
  277. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/stream/dash/segment.py +0 -0
  278. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/stream/ffmpegmux.py +0 -0
  279. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/stream/file.py +0 -0
  280. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/stream/filtered.py +0 -0
  281. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/stream/hls/__init__.py +0 -0
  282. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/stream/hls/hls.py +0 -0
  283. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/stream/hls/m3u8.py +0 -0
  284. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/stream/hls/segment.py +0 -0
  285. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/stream/http.py +0 -0
  286. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/stream/segmented/__init__.py +0 -0
  287. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/stream/segmented/segment.py +0 -0
  288. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/stream/segmented/segmented.py +0 -0
  289. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/stream/stream.py +0 -0
  290. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/stream/wrappers.py +0 -0
  291. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/user_input.py +0 -0
  292. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/utils/__init__.py +0 -0
  293. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/utils/args.py +0 -0
  294. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/utils/cache.py +0 -0
  295. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/utils/crypto.py +0 -0
  296. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/utils/data.py +0 -0
  297. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/utils/formatter.py +0 -0
  298. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/utils/l10n.py +0 -0
  299. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/utils/module.py +0 -0
  300. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/utils/named_pipe.py +0 -0
  301. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/utils/parse.py +0 -0
  302. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/utils/path.py +0 -0
  303. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/utils/processoutput.py +0 -0
  304. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/utils/random.py +0 -0
  305. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/utils/socket.py +0 -0
  306. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/utils/times.py +0 -0
  307. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/utils/url.py +0 -0
  308. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/validate/_exception.py +0 -0
  309. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/validate/_schemas.py +0 -0
  310. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/validate/_validate.py +0 -0
  311. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/validate/_validators.py +0 -0
  312. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/webbrowser/__init__.py +0 -0
  313. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/webbrowser/cdp/__init__.py +0 -0
  314. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/webbrowser/cdp/client.py +0 -0
  315. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/webbrowser/cdp/connection.py +0 -0
  316. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/webbrowser/cdp/devtools/__init__.py +0 -0
  317. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/webbrowser/cdp/devtools/browser.py +0 -0
  318. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/webbrowser/cdp/devtools/debugger.py +0 -0
  319. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/webbrowser/cdp/devtools/dom.py +0 -0
  320. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/webbrowser/cdp/devtools/emulation.py +0 -0
  321. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/webbrowser/cdp/devtools/fetch.py +0 -0
  322. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/webbrowser/cdp/devtools/input_.py +0 -0
  323. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/webbrowser/cdp/devtools/inspector.py +0 -0
  324. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/webbrowser/cdp/devtools/io.py +0 -0
  325. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/webbrowser/cdp/devtools/network.py +0 -0
  326. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/webbrowser/cdp/devtools/page.py +0 -0
  327. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/webbrowser/cdp/devtools/runtime.py +0 -0
  328. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/webbrowser/cdp/devtools/security.py +0 -0
  329. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/webbrowser/cdp/devtools/target.py +0 -0
  330. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/webbrowser/cdp/devtools/util.py +0 -0
  331. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/webbrowser/cdp/exceptions.py +0 -0
  332. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/webbrowser/chromium.py +0 -0
  333. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/webbrowser/exceptions.py +0 -0
  334. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink/webbrowser/webbrowser.py +0 -0
  335. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink.egg-info/dependency_links.txt +0 -0
  336. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink.egg-info/entry_points.txt +0 -0
  337. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink.egg-info/requires.txt +0 -0
  338. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink.egg-info/top_level.txt +0 -0
  339. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink_cli/__init__.py +0 -0
  340. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink_cli/__main__.py +0 -0
  341. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink_cli/_parser.py +0 -0
  342. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink_cli/argparser.py +0 -0
  343. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink_cli/compat.py +0 -0
  344. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink_cli/exceptions.py +0 -0
  345. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink_cli/output/__init__.py +0 -0
  346. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink_cli/output/abc.py +0 -0
  347. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink_cli/output/file.py +0 -0
  348. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink_cli/output/http.py +0 -0
  349. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink_cli/output/player.py +0 -0
  350. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink_cli/py.typed +0 -0
  351. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink_cli/show_matchers.py +0 -0
  352. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink_cli/utils/__init__.py +0 -0
  353. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink_cli/utils/formatter.py +0 -0
  354. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink_cli/utils/path.py +0 -0
  355. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink_cli/utils/player.py +0 -0
  356. {streamlink-7.2.0 → streamlink-7.3.0}/src/streamlink_cli/utils/versioncheck.py +0 -0
  357. {streamlink-7.2.0 → streamlink-7.3.0}/tests/__init__.py +0 -0
  358. {streamlink-7.2.0 → streamlink-7.3.0}/tests/cli/__init__.py +0 -0
  359. {streamlink-7.2.0/tests/cli/main → streamlink-7.3.0/tests/cli/console}/__init__.py +0 -0
  360. {streamlink-7.2.0/tests/cli/output → streamlink-7.3.0/tests/cli/main}/__init__.py +0 -0
  361. {streamlink-7.2.0 → streamlink-7.3.0}/tests/cli/main/test_can_handle_url.py +0 -0
  362. {streamlink-7.2.0 → streamlink-7.3.0}/tests/cli/main/test_check_file_output.py +0 -0
  363. {streamlink-7.2.0 → streamlink-7.3.0}/tests/cli/main/test_create_output.py +0 -0
  364. {streamlink-7.2.0 → streamlink-7.3.0}/tests/cli/main/test_formatter.py +0 -0
  365. {streamlink-7.2.0 → streamlink-7.3.0}/tests/cli/main/test_handle_url.py +0 -0
  366. {streamlink-7.2.0 → streamlink-7.3.0}/tests/cli/main/test_output_stream_passthrough.py +0 -0
  367. {streamlink-7.2.0 → streamlink-7.3.0}/tests/cli/main/test_player_argv.py +0 -0
  368. {streamlink-7.2.0 → streamlink-7.3.0}/tests/cli/main/test_resolve_stream_name.py +0 -0
  369. {streamlink-7.2.0 → streamlink-7.3.0}/tests/cli/main/test_setup_config_args.py +0 -0
  370. {streamlink-7.2.0 → streamlink-7.3.0}/tests/cli/main/test_show_matchers.py +0 -0
  371. {streamlink-7.2.0 → streamlink-7.3.0}/tests/cli/main/test_version_check.py +0 -0
  372. {streamlink-7.2.0/tests/cli/utils → streamlink-7.3.0/tests/cli/output}/__init__.py +0 -0
  373. {streamlink-7.2.0 → streamlink-7.3.0}/tests/cli/output/test_file.py +0 -0
  374. {streamlink-7.2.0 → streamlink-7.3.0}/tests/cli/output/test_player.py +0 -0
  375. {streamlink-7.2.0 → streamlink-7.3.0}/tests/cli/test_argparser.py +0 -0
  376. {streamlink-7.2.0 → streamlink-7.3.0}/tests/cli/test_compat.py +0 -0
  377. {streamlink-7.2.0/tests/mixins → streamlink-7.3.0/tests/cli/utils}/__init__.py +0 -0
  378. {streamlink-7.2.0 → streamlink-7.3.0}/tests/cli/utils/test_formatter.py +0 -0
  379. {streamlink-7.2.0 → streamlink-7.3.0}/tests/cli/utils/test_path.py +0 -0
  380. {streamlink-7.2.0 → streamlink-7.3.0}/tests/cli/utils/test_player.py +0 -0
  381. {streamlink-7.2.0 → streamlink-7.3.0}/tests/cli/utils/test_versioncheck.py +0 -0
  382. {streamlink-7.2.0 → streamlink-7.3.0}/tests/conftest.py +0 -0
  383. {streamlink-7.2.0/tests/plugin → streamlink-7.3.0/tests/mixins}/__init__.py +0 -0
  384. {streamlink-7.2.0 → streamlink-7.3.0}/tests/mixins/stream_hls.py +0 -0
  385. {streamlink-7.2.0/tests/session → streamlink-7.3.0/tests/plugin}/__init__.py +0 -0
  386. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugin/override/testplugin.py +0 -0
  387. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugin/testplugin.py +0 -0
  388. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugin/testplugin_invalid.py +0 -0
  389. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugin/testplugin_missing.py +0 -0
  390. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/__init__.py +0 -0
  391. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/conftest.py +0 -0
  392. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_abematv.py +0 -0
  393. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_adultswim.py +0 -0
  394. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_albavision.py +0 -0
  395. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_aloula.py +0 -0
  396. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_app17.py +0 -0
  397. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_ard_live.py +0 -0
  398. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_ard_mediathek.py +0 -0
  399. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_artetv.py +0 -0
  400. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_atpchallenger.py +0 -0
  401. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_atresplayer.py +0 -0
  402. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_bbciplayer.py +0 -0
  403. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_bfmtv.py +0 -0
  404. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_bigo.py +0 -0
  405. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_bilibili.py +0 -0
  406. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_blazetv.py +0 -0
  407. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_bloomberg.py +0 -0
  408. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_brightcove.py +0 -0
  409. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_btv.py +0 -0
  410. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_cbsnews.py +0 -0
  411. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_cdnbg.py +0 -0
  412. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_ceskatelevize.py +0 -0
  413. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_chzzk.py +0 -0
  414. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_cinergroup.py +0 -0
  415. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_clubbingtv.py +0 -0
  416. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_cmmedia.py +0 -0
  417. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_cnbce.py +0 -0
  418. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_cnews.py +0 -0
  419. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_dailymotion.py +0 -0
  420. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_dash.py +0 -0
  421. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_delfi.py +0 -0
  422. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_deutschewelle.py +0 -0
  423. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_dlive.py +0 -0
  424. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_dogan.py +0 -0
  425. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_dogus.py +0 -0
  426. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_douyin.py +0 -0
  427. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_drdk.py +0 -0
  428. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_earthcam.py +0 -0
  429. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_euronews.py +0 -0
  430. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_filmon.py +0 -0
  431. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_goltelevision.py +0 -0
  432. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_goodgame.py +0 -0
  433. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_googledrive.py +0 -0
  434. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_gulli.py +0 -0
  435. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_hiplayer.py +0 -0
  436. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_hls.py +0 -0
  437. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_http.py +0 -0
  438. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_htv.py +0 -0
  439. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_huajiao.py +0 -0
  440. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_huya.py +0 -0
  441. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_indihometv.py +0 -0
  442. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_invintus.py +0 -0
  443. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_kick.py +0 -0
  444. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_kugou.py +0 -0
  445. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_livestream.py +0 -0
  446. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_lnk.py +0 -0
  447. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_lrt.py +0 -0
  448. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_ltv_lsm_lv.py +0 -0
  449. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_mangomolo.py +0 -0
  450. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_mdstrm.py +0 -0
  451. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_mediaklikk.py +0 -0
  452. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_mediavitrina.py +0 -0
  453. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_mitele.py +0 -0
  454. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_mixcloud.py +0 -0
  455. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_mjunoon.py +0 -0
  456. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_mrtmk.py +0 -0
  457. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_n13tv.py +0 -0
  458. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_nasaplus.py +0 -0
  459. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_nhkworld.py +0 -0
  460. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_nicolive.py +0 -0
  461. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_nimotv.py +0 -0
  462. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_nos.py +0 -0
  463. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_nrk.py +0 -0
  464. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_okru.py +0 -0
  465. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_olympicchannel.py +0 -0
  466. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_oneplusone.py +0 -0
  467. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_onetv.py +0 -0
  468. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_openrectv.py +0 -0
  469. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_pandalive.py +0 -0
  470. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_piaulizaportal.py +0 -0
  471. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_picarto.py +0 -0
  472. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_piczel.py +0 -0
  473. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_pixiv.py +0 -0
  474. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_pluto.py +0 -0
  475. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_pluzz.py +0 -0
  476. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_radiko.py +0 -0
  477. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_raiplay.py +0 -0
  478. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_reuters.py +0 -0
  479. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_rtpa.py +0 -0
  480. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_rtpplay.py +0 -0
  481. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_rtve.py +0 -0
  482. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_rtvs.py +0 -0
  483. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_ruv.py +0 -0
  484. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_sbscokr.py +0 -0
  485. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_showroom.py +0 -0
  486. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_soop.py +0 -0
  487. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_sportal.py +0 -0
  488. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_sportschau.py +0 -0
  489. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_ssh101.py +0 -0
  490. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_stadium.py +0 -0
  491. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_steam.py +0 -0
  492. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_streann.py +0 -0
  493. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_stv.py +0 -0
  494. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_svtplay.py +0 -0
  495. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_swisstxt.py +0 -0
  496. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_telefe.py +0 -0
  497. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_telemadrid.py +0 -0
  498. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_tf1.py +0 -0
  499. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_tiktok.py +0 -0
  500. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_trovo.py +0 -0
  501. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_turkuvaz.py +0 -0
  502. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_tv360.py +0 -0
  503. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_tv3cat.py +0 -0
  504. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_tv5monde.py +0 -0
  505. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_tv8.py +0 -0
  506. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_tv999.py +0 -0
  507. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_tvibo.py +0 -0
  508. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_tviplayer.py +0 -0
  509. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_tvp.py +0 -0
  510. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_tvtoya.py +0 -0
  511. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_twitcasting.py +0 -0
  512. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_twitch.py +0 -0
  513. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_ustreamtv.py +0 -0
  514. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_ustvnow.py +0 -0
  515. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_vidio.py +0 -0
  516. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_vimeo.py +0 -0
  517. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_vinhlongtv.py +0 -0
  518. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_vk.py +0 -0
  519. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_vkvideo.py +0 -0
  520. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_vtvgo.py +0 -0
  521. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_welt.py +0 -0
  522. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_wwenetwork.py +0 -0
  523. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_youtube.py +0 -0
  524. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_yupptv.py +0 -0
  525. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_zattoo.py +0 -0
  526. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_zdf_mediathek.py +0 -0
  527. {streamlink-7.2.0 → streamlink-7.3.0}/tests/plugins/test_zeenews.py +0 -0
  528. {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/__init__.py +0 -0
  529. {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/cli/config/custom +0 -0
  530. {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/cli/config/primary +0 -0
  531. {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/cli/config/primary.testplugin +0 -0
  532. {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/cli/config/secondary +0 -0
  533. {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/cli/config/secondary.testplugin +0 -0
  534. {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/dash/test_1.mpd +0 -0
  535. {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/dash/test_10.mpd +0 -0
  536. {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/dash/test_11_static.mpd +0 -0
  537. {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/dash/test_2.mpd +0 -0
  538. {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/dash/test_3.mpd +0 -0
  539. {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/dash/test_8.mpd +0 -0
  540. {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/dash/test_9.mpd +0 -0
  541. {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/dash/test_baseurl_nested.mpd +0 -0
  542. {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/dash/test_baseurl_urljoin.mpd +0 -0
  543. {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/dash/test_dynamic_no_publish_time_timeline_with_start.mpd +0 -0
  544. {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/dash/test_dynamic_no_publish_time_timeline_without_start.mpd +0 -0
  545. {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/dash/test_dynamic_segment_list_no_duration.mpd +0 -0
  546. {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/dash/test_dynamic_segment_list_p1.mpd +0 -0
  547. {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/dash/test_dynamic_segment_list_p2.mpd +0 -0
  548. {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/dash/test_dynamic_segment_list_p3.mpd +0 -0
  549. {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/dash/test_dynamic_segment_list_p4.mpd +0 -0
  550. {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/dash/test_dynamic_segment_list_p5.mpd +0 -0
  551. {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/dash/test_dynamic_timeline_continued_p1.mpd +0 -0
  552. {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/dash/test_dynamic_timeline_continued_p2.mpd +0 -0
  553. {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/dash/test_no_segment_list_or_template.mpd +0 -0
  554. {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/dash/test_segment_list.mpd +0 -0
  555. {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/dash/test_segments_byterange.mpd +0 -0
  556. {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/dash/test_segments_dynamic_number.mpd +0 -0
  557. {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/dash/test_static_no_publish_time.mpd +0 -0
  558. {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/dash/test_suggested_presentation_delay.mpd +0 -0
  559. {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/dash/test_timeline_ids.mpd +0 -0
  560. {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/hls/test_1.m3u8 +0 -0
  561. {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/hls/test_date.m3u8 +0 -0
  562. {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/hls/test_master.m3u8 +0 -0
  563. {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/hls/test_master_twitch_vod.m3u8 +0 -0
  564. {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/hls/test_media_language.m3u8 +0 -0
  565. {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/hls/test_media_language_special.m3u8 +0 -0
  566. {streamlink-7.2.0 → streamlink-7.3.0}/tests/resources/hls/test_multivariant_bandwidth.m3u8 +0 -0
  567. {streamlink-7.2.0/tests/stream → streamlink-7.3.0/tests/session}/__init__.py +0 -0
  568. {streamlink-7.2.0 → streamlink-7.3.0}/tests/session/test_http.py +0 -0
  569. {streamlink-7.2.0 → streamlink-7.3.0}/tests/session/test_options.py +0 -0
  570. {streamlink-7.2.0 → streamlink-7.3.0}/tests/session/test_plugins.py +0 -0
  571. {streamlink-7.2.0 → streamlink-7.3.0}/tests/session/test_session.py +0 -0
  572. {streamlink-7.2.0/tests/stream/dash → streamlink-7.3.0/tests/stream}/__init__.py +0 -0
  573. {streamlink-7.2.0/tests/stream/hls → streamlink-7.3.0/tests/stream/dash}/__init__.py +0 -0
  574. {streamlink-7.2.0 → streamlink-7.3.0}/tests/stream/dash/test_dash.py +0 -0
  575. {streamlink-7.2.0 → streamlink-7.3.0}/tests/stream/dash/test_manifest.py +0 -0
  576. {streamlink-7.2.0/tests/testutils → streamlink-7.3.0/tests/stream/hls}/__init__.py +0 -0
  577. {streamlink-7.2.0 → streamlink-7.3.0}/tests/stream/hls/test_hls.py +0 -0
  578. {streamlink-7.2.0 → streamlink-7.3.0}/tests/stream/hls/test_hls_filtered.py +0 -0
  579. {streamlink-7.2.0 → streamlink-7.3.0}/tests/stream/hls/test_m3u8.py +0 -0
  580. {streamlink-7.2.0 → streamlink-7.3.0}/tests/stream/test_ffmpegmux.py +0 -0
  581. {streamlink-7.2.0 → streamlink-7.3.0}/tests/stream/test_file.py +0 -0
  582. {streamlink-7.2.0 → streamlink-7.3.0}/tests/stream/test_segmented.py +0 -0
  583. {streamlink-7.2.0 → streamlink-7.3.0}/tests/stream/test_stream_json.py +0 -0
  584. {streamlink-7.2.0 → streamlink-7.3.0}/tests/stream/test_stream_to_url.py +0 -0
  585. {streamlink-7.2.0 → streamlink-7.3.0}/tests/stream/test_stream_wrappers.py +0 -0
  586. {streamlink-7.2.0 → streamlink-7.3.0}/tests/test_api_websocket.py +0 -0
  587. {streamlink-7.2.0 → streamlink-7.3.0}/tests/test_buffers.py +0 -0
  588. {streamlink-7.2.0 → streamlink-7.3.0}/tests/test_cache.py +0 -0
  589. {streamlink-7.2.0 → streamlink-7.3.0}/tests/test_compat.py +0 -0
  590. {streamlink-7.2.0 → streamlink-7.3.0}/tests/test_logger.py +0 -0
  591. {streamlink-7.2.0 → streamlink-7.3.0}/tests/test_options.py +0 -0
  592. {streamlink-7.2.0 → streamlink-7.3.0}/tests/test_plugin.py +0 -0
  593. {streamlink-7.2.0 → streamlink-7.3.0}/tests/test_plugin_userinput.py +0 -0
  594. {streamlink-7.2.0 → streamlink-7.3.0}/tests/test_plugins.py +0 -0
  595. {streamlink-7.2.0 → streamlink-7.3.0}/tests/test_streamlink_api.py +0 -0
  596. {streamlink-7.2.0 → streamlink-7.3.0}/tests/test_validate.py +0 -0
  597. {streamlink-7.2.0/tests/utils → streamlink-7.3.0/tests/testutils}/__init__.py +0 -0
  598. {streamlink-7.2.0 → streamlink-7.3.0}/tests/testutils/handshake.py +0 -0
  599. {streamlink-7.2.0 → streamlink-7.3.0}/tests/testutils/test_handshake.py +0 -0
  600. {streamlink-7.2.0/tests/webbrowser → streamlink-7.3.0/tests/utils}/__init__.py +0 -0
  601. {streamlink-7.2.0 → streamlink-7.3.0}/tests/utils/test_args.py +0 -0
  602. {streamlink-7.2.0 → streamlink-7.3.0}/tests/utils/test_cache.py +0 -0
  603. {streamlink-7.2.0 → streamlink-7.3.0}/tests/utils/test_crypto.py +0 -0
  604. {streamlink-7.2.0 → streamlink-7.3.0}/tests/utils/test_data.py +0 -0
  605. {streamlink-7.2.0 → streamlink-7.3.0}/tests/utils/test_formatter.py +0 -0
  606. {streamlink-7.2.0 → streamlink-7.3.0}/tests/utils/test_l10n.py +0 -0
  607. {streamlink-7.2.0 → streamlink-7.3.0}/tests/utils/test_module.py +0 -0
  608. {streamlink-7.2.0 → streamlink-7.3.0}/tests/utils/test_named_pipe.py +0 -0
  609. {streamlink-7.2.0 → streamlink-7.3.0}/tests/utils/test_parse.py +0 -0
  610. {streamlink-7.2.0 → streamlink-7.3.0}/tests/utils/test_path.py +0 -0
  611. {streamlink-7.2.0 → streamlink-7.3.0}/tests/utils/test_processoutput.py +0 -0
  612. {streamlink-7.2.0 → streamlink-7.3.0}/tests/utils/test_random.py +0 -0
  613. {streamlink-7.2.0 → streamlink-7.3.0}/tests/utils/test_times.py +0 -0
  614. {streamlink-7.2.0 → streamlink-7.3.0}/tests/utils/test_url.py +0 -0
  615. {streamlink-7.2.0 → streamlink-7.3.0}/tests/webbrowser/cdp/__init__.py +0 -0
  616. {streamlink-7.2.0 → streamlink-7.3.0}/tests/webbrowser/cdp/conftest.py +0 -0
  617. {streamlink-7.2.0 → streamlink-7.3.0}/tests/webbrowser/cdp/test_client.py +0 -0
  618. {streamlink-7.2.0 → streamlink-7.3.0}/tests/webbrowser/cdp/test_connection.py +0 -0
  619. {streamlink-7.2.0 → streamlink-7.3.0}/tests/webbrowser/conftest.py +0 -0
  620. {streamlink-7.2.0 → streamlink-7.3.0}/tests/webbrowser/test_chromium.py +0 -0
  621. {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.2.0
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: Simplified BSD
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
@@ -14,7 +14,7 @@ pytest-cov
14
14
  coverage[toml]
15
15
 
16
16
  # code-linting / code-formatting
17
- ruff ==0.11.2
17
+ ruff ==0.11.5
18
18
 
19
19
  # typing
20
20
  mypy[faster-cache] ==1.15.0
@@ -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 04, 2025" "7.2.0" "Streamlink"
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-linter>`_ and `formatting <Ruff-formatter>`_ tool.
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 >=65.6",
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 = { text = "Simplified BSD" }
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
@@ -97,5 +97,5 @@ if __name__ == "__main__":
97
97
  cmdclass=get_cmdclasses(cmdclass),
98
98
  entry_points=entry_points,
99
99
  data_files=data_files,
100
- version="7.2.0",
100
+ version="7.3.0",
101
101
  )
@@ -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
- yield from self._get_streams_hls(hls)
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,4 +1,4 @@
1
- # ruff: noqa: A001, A004, I001
1
+ # ruff: noqa: A004, I001
2
2
  # order the module members logically (autodoc_member_order == "bysource")
3
3
 
4
4
  from streamlink.validate._validate import (
@@ -1,17 +1,16 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: streamlink
3
- Version: 7.2.0
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: Simplified BSD
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
@@ -0,0 +1,3 @@
1
+ from streamlink_cli.console.console import ConsoleOutput
2
+ from streamlink_cli.console.stream import ConsoleOutputStream
3
+ from streamlink_cli.console.user_input import ConsoleUserInputRequester
@@ -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 streamlink.user_input import UserInputRequester
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: TextIO | None = None,
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: TextIO | None = 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) -> TextIO | None:
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: TextIO | None) -> None:
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 | None, msg: str):
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._write(self._console_output, prompt)
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._write(self._console_output, msg)
95
- self._write(self._file_output, msg)
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._write(self._console_output, f"{msg}\n")
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, TextIO
11
+ from typing import TYPE_CHECKING
13
12
 
14
- from streamlink.compat import is_win32
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
- term_width = cls.term_width()
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 > term_width:
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((term_width - length) / len(variable))
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 = cls.width(string)
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 -= cls.width(path.drive) + cls.width(cls.ELLIPSIS)
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 = cls.cut(parts, max_width)
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
- stream: TextIO,
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 stream: The output stream
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.stream: TextIO = stream
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
- self.print_inplace(status)
300
-
301
- def print_inplace(self, msg: str):
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)