commit: 58f8c42b1c678687d2ed9baf7ed16f45c0188a40
parent 2ecee433b9673128ad4796988a1767989ef343b1
Author: Michael Forney <mforney@mforney.org>
Date: Thu, 21 Jul 2022 13:29:38 -0700
yt-dlp: Update to 2022.07.18
Diffstat:
5 files changed, 112 insertions(+), 195 deletions(-)
diff --git a/pkg/yt-dlp/patch/0001-Disable-use-of-ctypes-and-dynamic-loading.patch b/pkg/yt-dlp/patch/0001-Disable-use-of-ctypes-and-dynamic-loading.patch
@@ -1,67 +1,35 @@
-From 80d23f5b00895685d4ab1535757dbd3ee88ad72d Mon Sep 17 00:00:00 2001
+From b5f26e6d73a01270c0bdb84843d5ff57438e3a2c Mon Sep 17 00:00:00 2001
From: Michael Forney <mforney@mforney.org>
Date: Mon, 4 Jul 2016 16:14:18 -0700
Subject: [PATCH] Disable use of ctypes and dynamic loading
---
- yt_dlp/compat.py | 8 ---
- yt_dlp/cookies.py | 76 ----------------------
- yt_dlp/utils.py | 160 +---------------------------------------------
- 3 files changed, 1 insertion(+), 243 deletions(-)
+ yt_dlp/cookies.py | 73 -----------------------------------------
+ yt_dlp/utils.py | 82 +----------------------------------------------
+ 2 files changed, 1 insertion(+), 154 deletions(-)
-diff --git a/yt_dlp/compat.py b/yt_dlp/compat.py
-index b97d4512e..f02b8900b 100644
---- a/yt_dlp/compat.py
-+++ b/yt_dlp/compat.py
-@@ -3,7 +3,6 @@
- import asyncio
- import base64
- import collections
--import ctypes
- import getpass
- import html
- import html.parser
-@@ -35,12 +34,6 @@ class compat_HTMLParseError(Exception):
- pass
-
-
--# compat_ctypes_WINFUNCTYPE = ctypes.WINFUNCTYPE
--# will not work since ctypes.WINFUNCTYPE does not exist in UNIX machines
--def compat_ctypes_WINFUNCTYPE(*args, **kwargs):
-- return ctypes.WINFUNCTYPE(*args, **kwargs)
--
--
- class _TreeBuilder(etree.TreeBuilder):
- def doctype(self, name, pubid, system):
- pass
-@@ -254,7 +247,6 @@ __all__ = [
- 'compat_cookiejar_Cookie',
- 'compat_cookies',
- 'compat_cookies_SimpleCookie',
-- 'compat_ctypes_WINFUNCTYPE',
- 'compat_etree_Element',
- 'compat_etree_fromstring',
- 'compat_etree_register_namespace',
diff --git a/yt_dlp/cookies.py b/yt_dlp/cookies.py
-index fc033a8ae..7ccf9b19e 100644
+index df8f97b44..7c4fb932f 100644
--- a/yt_dlp/cookies.py
+++ b/yt_dlp/cookies.py
-@@ -1,5 +1,4 @@
+@@ -1,7 +1,5 @@
+ import base64
import contextlib
-import ctypes
+-import http.cookiejar
import json
import os
import shutil
-@@ -323,8 +322,6 @@ def get_cookie_decryptor(browser_root, browser_keyring_name, logger, *, keyring=
- return LinuxChromeCookieDecryptor(browser_keyring_name, logger, keyring=keyring)
- elif sys.platform == 'darwin':
+@@ -340,8 +338,6 @@ def decrypt(self, encrypted_value):
+ def get_cookie_decryptor(browser_root, browser_keyring_name, logger, *, keyring=None):
+ if sys.platform == 'darwin':
return MacChromeCookieDecryptor(browser_keyring_name, logger)
-- elif sys.platform == 'win32':
+- elif sys.platform in ('win32', 'cygwin'):
- return WindowsChromeCookieDecryptor(browser_root, logger)
- else:
- raise NotImplementedError('Chrome cookie decryption is not supported '
- 'on this platform: {}'.format(sys.platform))
-@@ -404,47 +401,6 @@ class MacChromeCookieDecryptor(ChromeCookieDecryptor):
+ return LinuxChromeCookieDecryptor(browser_keyring_name, logger, keyring=keyring)
+
+
+@@ -411,43 +407,6 @@ def decrypt(self, encrypted_value):
return encrypted_value
@@ -71,10 +39,6 @@ index fc033a8ae..7ccf9b19e 100644
- self._v10_key = _get_windows_v10_key(browser_root, logger)
- self._cookie_counts = {'v10': 0, 'other': 0}
-
-- @property
-- def cookie_counts(self):
-- return self._cookie_counts
--
- def decrypt(self, encrypted_value):
- version = encrypted_value[:3]
- ciphertext = encrypted_value[3:]
@@ -103,13 +67,13 @@ index fc033a8ae..7ccf9b19e 100644
- self._cookie_counts['other'] += 1
- # any other prefix means the data is DPAPI encrypted
- # https://chromium.googlesource.com/chromium/src/+/refs/heads/main/components/os_crypt/os_crypt_win.cc
-- return _decrypt_windows_dpapi(encrypted_value, self._logger).decode('utf-8')
+- return _decrypt_windows_dpapi(encrypted_value, self._logger).decode()
-
-
def _extract_safari_cookies(profile, logger):
if profile is not None:
logger.error('safari does not support profiles')
-@@ -872,38 +828,6 @@ def _decrypt_aes_gcm(ciphertext, key, nonce, authentication_tag, logger):
+@@ -871,38 +830,6 @@ def _decrypt_aes_gcm(ciphertext, key, nonce, authentication_tag, logger):
return None
@@ -149,117 +113,19 @@ index fc033a8ae..7ccf9b19e 100644
return os.environ.get('XDG_CONFIG_HOME', os.path.expanduser('~/.config'))
diff --git a/yt_dlp/utils.py b/yt_dlp/utils.py
-index fe1096168..4f8e75642 100644
+index 7648b6fce..21110dc33 100644
--- a/yt_dlp/utils.py
+++ b/yt_dlp/utils.py
-@@ -9,7 +9,6 @@ import calendar
+@@ -5,7 +5,6 @@
import codecs
import collections
import contextlib
-import ctypes
import datetime
- import email.utils
import email.header
-@@ -47,7 +46,6 @@ from .compat import (
- compat_basestring,
- compat_chr,
- compat_cookiejar,
-- compat_ctypes_WINFUNCTYPE,
- compat_etree_fromstring,
- compat_expanduser,
- compat_html_entities,
-@@ -1967,89 +1965,11 @@ def get_windows_version():
- return None
-
-
--def _windows_write_string(s, out):
-- """ Returns True if the string was written using special methods,
-- False if it has yet to be written out."""
-- # Adapted from http://stackoverflow.com/a/3259271/35070
--
-- import ctypes.wintypes
--
-- WIN_OUTPUT_IDS = {
-- 1: -11,
-- 2: -12,
-- }
--
-- try:
-- fileno = out.fileno()
-- except AttributeError:
-- # If the output stream doesn't have a fileno, it's virtual
-- return False
-- except io.UnsupportedOperation:
-- # Some strange Windows pseudo files?
-- return False
-- if fileno not in WIN_OUTPUT_IDS:
-- return False
--
-- GetStdHandle = compat_ctypes_WINFUNCTYPE(
-- ctypes.wintypes.HANDLE, ctypes.wintypes.DWORD)(
-- ('GetStdHandle', ctypes.windll.kernel32))
-- h = GetStdHandle(WIN_OUTPUT_IDS[fileno])
--
-- WriteConsoleW = compat_ctypes_WINFUNCTYPE(
-- ctypes.wintypes.BOOL, ctypes.wintypes.HANDLE, ctypes.wintypes.LPWSTR,
-- ctypes.wintypes.DWORD, ctypes.POINTER(ctypes.wintypes.DWORD),
-- ctypes.wintypes.LPVOID)(('WriteConsoleW', ctypes.windll.kernel32))
-- written = ctypes.wintypes.DWORD(0)
--
-- GetFileType = compat_ctypes_WINFUNCTYPE(ctypes.wintypes.DWORD, ctypes.wintypes.DWORD)(('GetFileType', ctypes.windll.kernel32))
-- FILE_TYPE_CHAR = 0x0002
-- FILE_TYPE_REMOTE = 0x8000
-- GetConsoleMode = compat_ctypes_WINFUNCTYPE(
-- ctypes.wintypes.BOOL, ctypes.wintypes.HANDLE,
-- ctypes.POINTER(ctypes.wintypes.DWORD))(
-- ('GetConsoleMode', ctypes.windll.kernel32))
-- INVALID_HANDLE_VALUE = ctypes.wintypes.DWORD(-1).value
--
-- def not_a_console(handle):
-- if handle == INVALID_HANDLE_VALUE or handle is None:
-- return True
-- return ((GetFileType(handle) & ~FILE_TYPE_REMOTE) != FILE_TYPE_CHAR
-- or GetConsoleMode(handle, ctypes.byref(ctypes.wintypes.DWORD())) == 0)
--
-- if not_a_console(h):
-- return False
--
-- def next_nonbmp_pos(s):
-- try:
-- return next(i for i, c in enumerate(s) if ord(c) > 0xffff)
-- except StopIteration:
-- return len(s)
--
-- while s:
-- count = min(next_nonbmp_pos(s), 1024)
--
-- ret = WriteConsoleW(
-- h, s, count if count else 2, ctypes.byref(written), None)
-- if ret == 0:
-- raise OSError('Failed to write string')
-- if not count: # We just wrote a non-BMP character
-- assert written.value == 2
-- s = s[1:]
-- else:
-- assert written.value > 0
-- s = s[written.value:]
-- return True
--
--
- def write_string(s, out=None, encoding=None):
- if out is None:
- out = sys.stderr
- assert type(s) == compat_str
-
-- if sys.platform == 'win32' and encoding is None and hasattr(out, 'fileno'):
-- if _windows_write_string(s, out):
-- return
--
- if ('b' in getattr(out, 'mode', '')
- or sys.version_info[0] < 3): # Python 2 lies about mode of sys.stderr
- byt = s.encode(encoding or preferredencoding(), 'ignore')
-@@ -2078,62 +1998,6 @@ def intlist_to_bytes(xs):
- return compat_struct_pack('%dB' % len(xs), *xs)
+ import email.utils
+@@ -1983,63 +1982,6 @@ def __init__(self):
+ super().__init__(self.msg)
-# Cross-platform file locking
@@ -299,33 +165,34 @@ index fe1096168..4f8e75642 100644
- whole_low = 0xffffffff
- whole_high = 0x7fffffff
-
-- def _lock_file(f, exclusive):
+- def _lock_file(f, exclusive, block):
- overlapped = OVERLAPPED()
- overlapped.Offset = 0
- overlapped.OffsetHigh = 0
- overlapped.hEvent = 0
- f._lock_file_overlapped_p = ctypes.pointer(overlapped)
-- handle = msvcrt.get_osfhandle(f.fileno())
-- if not LockFileEx(handle, 0x2 if exclusive else 0x0, 0,
-- whole_low, whole_high, f._lock_file_overlapped_p):
-- raise OSError('Locking file failed: %r' % ctypes.FormatError())
+-
+- if not LockFileEx(msvcrt.get_osfhandle(f.fileno()),
+- (0x2 if exclusive else 0x0) | (0x0 if block else 0x1),
+- 0, whole_low, whole_high, f._lock_file_overlapped_p):
+- # NB: No argument form of "ctypes.FormatError" does not work on PyPy
+- raise BlockingIOError(f'Locking file failed: {ctypes.FormatError(ctypes.GetLastError())!r}')
-
- def _unlock_file(f):
- assert f._lock_file_overlapped_p
- handle = msvcrt.get_osfhandle(f.fileno())
-- if not UnlockFileEx(handle, 0,
-- whole_low, whole_high, f._lock_file_overlapped_p):
+- if not UnlockFileEx(handle, 0, whole_low, whole_high, f._lock_file_overlapped_p):
- raise OSError('Unlocking file failed: %r' % ctypes.FormatError())
-
-else:
- # Some platforms, such as Jython, is missing fcntl
try:
import fcntl
-@@ -2407,29 +2271,7 @@ def fix_xml_ampersands(xml_str):
+
+@@ -2362,29 +2304,7 @@ def fix_xml_ampersands(xml_str):
def setproctitle(title):
-- assert isinstance(title, compat_str)
+- assert isinstance(title, str)
-
- # ctypes in Jython is not complete
- # http://bugs.jython.org/issue2148
@@ -341,7 +208,7 @@ index fe1096168..4f8e75642 100644
- # a bytestring, but since unicode_literals turns
- # every string into a unicode string, it fails.
- return
-- title_bytes = title.encode('utf-8')
+- title_bytes = title.encode()
- buf = ctypes.create_string_buffer(len(title_bytes))
- buf.value = title_bytes
- try:
@@ -353,5 +220,5 @@ index fe1096168..4f8e75642 100644
def remove_start(s, start):
--
-2.34.1
+2.35.1
diff --git a/pkg/yt-dlp/pylibs.txt b/pkg/yt-dlp/pylibs.txt
@@ -4,13 +4,22 @@ yt_dlp/__init__.py
yt_dlp/__main__.py
yt_dlp/aes.py
yt_dlp/cache.py
-yt_dlp/compat.py
+yt_dlp/compat/__init__.py
+yt_dlp/compat/_deprecated.py
+yt_dlp/compat/_legacy.py
+yt_dlp/compat/asyncio.py
+yt_dlp/compat/compat_utils.py
+yt_dlp/compat/functools.py
+yt_dlp/compat/imghdr.py
+yt_dlp/compat/re.py
yt_dlp/cookies.py
+yt_dlp/dependencies.py
yt_dlp/downloader/__init__.py
yt_dlp/downloader/common.py
yt_dlp/downloader/dash.py
yt_dlp/downloader/external.py
yt_dlp/downloader/f4m.py
+yt_dlp/downloader/fc2.py
yt_dlp/downloader/fragment.py
yt_dlp/downloader/hls.py
yt_dlp/downloader/http.py
@@ -22,11 +31,14 @@ yt_dlp/downloader/rtsp.py
yt_dlp/downloader/websocket.py
yt_dlp/downloader/youtube_live_chat.py
yt_dlp/extractor/__init__.py
+yt_dlp/extractor/_extractors.py
yt_dlp/extractor/abc.py
yt_dlp/extractor/abcnews.py
yt_dlp/extractor/abcotvs.py
+yt_dlp/extractor/abematv.py
yt_dlp/extractor/academicearth.py
yt_dlp/extractor/acast.py
+yt_dlp/extractor/acfun.py
yt_dlp/extractor/adn.py
yt_dlp/extractor/adobeconnect.py
yt_dlp/extractor/adobepass.py
@@ -39,14 +51,15 @@ yt_dlp/extractor/aliexpress.py
yt_dlp/extractor/aljazeera.py
yt_dlp/extractor/allocine.py
yt_dlp/extractor/alphaporno.py
+yt_dlp/extractor/alsace20tv.py
yt_dlp/extractor/alura.py
yt_dlp/extractor/amara.py
yt_dlp/extractor/amazon.py
yt_dlp/extractor/amcnetworks.py
yt_dlp/extractor/americastestkitchen.py
yt_dlp/extractor/amp.py
-yt_dlp/extractor/animelab.py
yt_dlp/extractor/animeondemand.py
+yt_dlp/extractor/ant1newsgr.py
yt_dlp/extractor/anvato.py
yt_dlp/extractor/anvato_token_generator/__init__.py
yt_dlp/extractor/anvato_token_generator/common.py
@@ -65,16 +78,19 @@ yt_dlp/extractor/arnes.py
yt_dlp/extractor/arte.py
yt_dlp/extractor/asiancrush.py
yt_dlp/extractor/atresplayer.py
+yt_dlp/extractor/atscaleconf.py
yt_dlp/extractor/atttechchannel.py
yt_dlp/extractor/atvat.py
yt_dlp/extractor/audimedia.py
yt_dlp/extractor/audioboom.py
+yt_dlp/extractor/audiodraft.py
yt_dlp/extractor/audiomack.py
yt_dlp/extractor/audius.py
yt_dlp/extractor/awaan.py
yt_dlp/extractor/aws.py
yt_dlp/extractor/azmedien.py
yt_dlp/extractor/baidu.py
+yt_dlp/extractor/banbye.py
yt_dlp/extractor/bandaichannel.py
yt_dlp/extractor/bandcamp.py
yt_dlp/extractor/bannedvideo.py
@@ -88,6 +104,7 @@ yt_dlp/extractor/bfi.py
yt_dlp/extractor/bfmtv.py
yt_dlp/extractor/bibeltv.py
yt_dlp/extractor/bigflix.py
+yt_dlp/extractor/bigo.py
yt_dlp/extractor/bild.py
yt_dlp/extractor/bilibili.py
yt_dlp/extractor/biobiochiletv.py
@@ -96,7 +113,6 @@ yt_dlp/extractor/bitchute.py
yt_dlp/extractor/bitwave.py
yt_dlp/extractor/blackboardcollaborate.py
yt_dlp/extractor/bleacherreport.py
-yt_dlp/extractor/blinkx.py
yt_dlp/extractor/blogger.py
yt_dlp/extractor/bloomberg.py
yt_dlp/extractor/bokecc.py
@@ -115,6 +131,7 @@ yt_dlp/extractor/byutv.py
yt_dlp/extractor/c56.py
yt_dlp/extractor/cableav.py
yt_dlp/extractor/callin.py
+yt_dlp/extractor/caltrans.py
yt_dlp/extractor/cam4.py
yt_dlp/extractor/camdemy.py
yt_dlp/extractor/cammodels.py
@@ -135,6 +152,7 @@ yt_dlp/extractor/ccc.py
yt_dlp/extractor/ccma.py
yt_dlp/extractor/cctv.py
yt_dlp/extractor/cda.py
+yt_dlp/extractor/cellebrite.py
yt_dlp/extractor/ceskatelevize.py
yt_dlp/extractor/cgtn.py
yt_dlp/extractor/channel9.py
@@ -169,8 +187,10 @@ yt_dlp/extractor/contv.py
yt_dlp/extractor/corus.py
yt_dlp/extractor/coub.py
yt_dlp/extractor/cozytv.py
+yt_dlp/extractor/cpac.py
yt_dlp/extractor/cracked.py
yt_dlp/extractor/crackle.py
+yt_dlp/extractor/craftsy.py
yt_dlp/extractor/crooksandliars.py
yt_dlp/extractor/crowdbunker.py
yt_dlp/extractor/crunchyroll.py
@@ -181,16 +201,20 @@ yt_dlp/extractor/ctvnews.py
yt_dlp/extractor/cultureunplugged.py
yt_dlp/extractor/curiositystream.py
yt_dlp/extractor/cwtv.py
+yt_dlp/extractor/cybrary.py
yt_dlp/extractor/daftsex.py
yt_dlp/extractor/dailymail.py
yt_dlp/extractor/dailymotion.py
+yt_dlp/extractor/dailywire.py
yt_dlp/extractor/damtomo.py
yt_dlp/extractor/daum.py
+yt_dlp/extractor/daystar.py
yt_dlp/extractor/dbtv.py
yt_dlp/extractor/dctp.py
yt_dlp/extractor/deezer.py
yt_dlp/extractor/defense.py
yt_dlp/extractor/democracynow.py
+yt_dlp/extractor/detik.py
yt_dlp/extractor/dfb.py
yt_dlp/extractor/dhm.py
yt_dlp/extractor/digg.py
@@ -198,7 +222,6 @@ yt_dlp/extractor/digitalconcerthall.py
yt_dlp/extractor/digiteka.py
yt_dlp/extractor/discovery.py
yt_dlp/extractor/discoverygo.py
-yt_dlp/extractor/discoveryvr.py
yt_dlp/extractor/disney.py
yt_dlp/extractor/dispeak.py
yt_dlp/extractor/dlive.py
@@ -241,7 +264,6 @@ yt_dlp/extractor/esri.py
yt_dlp/extractor/europa.py
yt_dlp/extractor/europeantour.py
yt_dlp/extractor/euscreen.py
-yt_dlp/extractor/everyonesmixtape.py
yt_dlp/extractor/expotv.py
yt_dlp/extractor/expressen.py
yt_dlp/extractor/extractors.py
@@ -252,34 +274,35 @@ yt_dlp/extractor/fancode.py
yt_dlp/extractor/faz.py
yt_dlp/extractor/fc2.py
yt_dlp/extractor/fczenit.py
+yt_dlp/extractor/fifa.py
yt_dlp/extractor/filmmodu.py
yt_dlp/extractor/filmon.py
yt_dlp/extractor/filmweb.py
yt_dlp/extractor/firsttv.py
-yt_dlp/extractor/fivemin.py
yt_dlp/extractor/fivetv.py
yt_dlp/extractor/flickr.py
yt_dlp/extractor/folketinget.py
yt_dlp/extractor/footyroom.py
yt_dlp/extractor/formula1.py
yt_dlp/extractor/fourtube.py
+yt_dlp/extractor/fourzerostudio.py
yt_dlp/extractor/fox.py
yt_dlp/extractor/fox9.py
yt_dlp/extractor/foxgay.py
yt_dlp/extractor/foxnews.py
yt_dlp/extractor/foxsports.py
-yt_dlp/extractor/franceculture.py
+yt_dlp/extractor/fptplay.py
yt_dlp/extractor/franceinter.py
yt_dlp/extractor/francetv.py
yt_dlp/extractor/freesound.py
yt_dlp/extractor/freespeech.py
-yt_dlp/extractor/freshlive.py
+yt_dlp/extractor/freetv.py
yt_dlp/extractor/frontendmasters.py
yt_dlp/extractor/fujitv.py
yt_dlp/extractor/funimation.py
yt_dlp/extractor/funk.py
yt_dlp/extractor/fusion.py
-yt_dlp/extractor/fxnetworks.py
+yt_dlp/extractor/fuyintv.py
yt_dlp/extractor/gab.py
yt_dlp/extractor/gaia.py
yt_dlp/extractor/gameinformer.py
@@ -303,6 +326,7 @@ yt_dlp/extractor/go.py
yt_dlp/extractor/godtube.py
yt_dlp/extractor/gofile.py
yt_dlp/extractor/golem.py
+yt_dlp/extractor/goodgame.py
yt_dlp/extractor/googledrive.py
yt_dlp/extractor/googlepodcasts.py
yt_dlp/extractor/googlesearch.py
@@ -324,7 +348,6 @@ yt_dlp/extractor/historicfilms.py
yt_dlp/extractor/hitbox.py
yt_dlp/extractor/hitrecord.py
yt_dlp/extractor/hketv.py
-yt_dlp/extractor/hornbunny.py
yt_dlp/extractor/hotnewhiphop.py
yt_dlp/extractor/hotstar.py
yt_dlp/extractor/howcast.py
@@ -335,7 +358,10 @@ yt_dlp/extractor/hse.py
yt_dlp/extractor/huajiao.py
yt_dlp/extractor/huffpost.py
yt_dlp/extractor/hungama.py
+yt_dlp/extractor/huya.py
yt_dlp/extractor/hypem.py
+yt_dlp/extractor/hytale.py
+yt_dlp/extractor/icareus.py
yt_dlp/extractor/ichinanalive.py
yt_dlp/extractor/ign.py
yt_dlp/extractor/iheart.py
@@ -351,12 +377,14 @@ yt_dlp/extractor/internazionale.py
yt_dlp/extractor/internetvideoarchive.py
yt_dlp/extractor/iprima.py
yt_dlp/extractor/iqiyi.py
-yt_dlp/extractor/ir90tv.py
+yt_dlp/extractor/itprotv.py
yt_dlp/extractor/itv.py
yt_dlp/extractor/ivi.py
yt_dlp/extractor/ivideon.py
yt_dlp/extractor/iwara.py
+yt_dlp/extractor/ixigua.py
yt_dlp/extractor/izlesene.py
+yt_dlp/extractor/jable.py
yt_dlp/extractor/jamendo.py
yt_dlp/extractor/jeuxvideo.py
yt_dlp/extractor/joj.py
@@ -364,25 +392,26 @@ yt_dlp/extractor/jove.py
yt_dlp/extractor/jwplatform.py
yt_dlp/extractor/kakao.py
yt_dlp/extractor/kaltura.py
-yt_dlp/extractor/kanalplay.py
-yt_dlp/extractor/kankan.py
yt_dlp/extractor/karaoketv.py
yt_dlp/extractor/karrierevideos.py
yt_dlp/extractor/keezmovies.py
yt_dlp/extractor/kelbyone.py
yt_dlp/extractor/ketnet.py
yt_dlp/extractor/khanacademy.py
+yt_dlp/extractor/kicker.py
yt_dlp/extractor/kickstarter.py
yt_dlp/extractor/kinja.py
yt_dlp/extractor/kinopoisk.py
yt_dlp/extractor/konserthusetplay.py
yt_dlp/extractor/koo.py
yt_dlp/extractor/krasview.py
+yt_dlp/extractor/kth.py
yt_dlp/extractor/ku6.py
yt_dlp/extractor/kusi.py
yt_dlp/extractor/kuwo.py
yt_dlp/extractor/la7.py
yt_dlp/extractor/laola1tv.py
+yt_dlp/extractor/lastfm.py
yt_dlp/extractor/lazy_extractors.py
yt_dlp/extractor/lbry.py
yt_dlp/extractor/lci.py
@@ -396,13 +425,16 @@ yt_dlp/extractor/lenta.py
yt_dlp/extractor/libraryofcongress.py
yt_dlp/extractor/libsyn.py
yt_dlp/extractor/lifenews.py
+yt_dlp/extractor/likee.py
yt_dlp/extractor/limelight.py
yt_dlp/extractor/line.py
yt_dlp/extractor/linkedin.py
yt_dlp/extractor/linuxacademy.py
+yt_dlp/extractor/liputan6.py
yt_dlp/extractor/litv.py
yt_dlp/extractor/livejournal.py
yt_dlp/extractor/livestream.py
+yt_dlp/extractor/livestreamfails.py
yt_dlp/extractor/lnkgo.py
yt_dlp/extractor/localnews8.py
yt_dlp/extractor/lovehomeporn.py
@@ -419,6 +451,7 @@ yt_dlp/extractor/manyvids.py
yt_dlp/extractor/maoritv.py
yt_dlp/extractor/markiza.py
yt_dlp/extractor/massengeschmacktv.py
+yt_dlp/extractor/masters.py
yt_dlp/extractor/matchtv.py
yt_dlp/extractor/mdr.py
yt_dlp/extractor/medaltv.py
@@ -446,6 +479,7 @@ yt_dlp/extractor/ministrygrid.py
yt_dlp/extractor/minoto.py
yt_dlp/extractor/miomio.py
yt_dlp/extractor/mirrativ.py
+yt_dlp/extractor/mirrorcouk.py
yt_dlp/extractor/mit.py
yt_dlp/extractor/mitele.py
yt_dlp/extractor/mixch.py
@@ -453,6 +487,7 @@ yt_dlp/extractor/mixcloud.py
yt_dlp/extractor/mlb.py
yt_dlp/extractor/mlssoccer.py
yt_dlp/extractor/mnet.py
+yt_dlp/extractor/mocha.py
yt_dlp/extractor/moevideo.py
yt_dlp/extractor/mofosex.py
yt_dlp/extractor/mojvideo.py
@@ -460,11 +495,13 @@ yt_dlp/extractor/morningstar.py
yt_dlp/extractor/motherless.py
yt_dlp/extractor/motorsport.py
yt_dlp/extractor/movieclips.py
+yt_dlp/extractor/moviepilot.py
yt_dlp/extractor/moviezine.py
yt_dlp/extractor/movingimage.py
yt_dlp/extractor/msn.py
yt_dlp/extractor/mtv.py
yt_dlp/extractor/muenchentv.py
+yt_dlp/extractor/murrtube.py
yt_dlp/extractor/musescore.py
yt_dlp/extractor/musicdex.py
yt_dlp/extractor/mwave.py
@@ -486,12 +523,14 @@ yt_dlp/extractor/ndtv.py
yt_dlp/extractor/nebula.py
yt_dlp/extractor/nerdcubed.py
yt_dlp/extractor/neteasemusic.py
+yt_dlp/extractor/netverse.py
yt_dlp/extractor/netzkino.py
yt_dlp/extractor/newgrounds.py
yt_dlp/extractor/newstube.py
yt_dlp/extractor/newsy.py
yt_dlp/extractor/nextmedia.py
yt_dlp/extractor/nexx.py
+yt_dlp/extractor/nfb.py
yt_dlp/extractor/nfhsnetwork.py
yt_dlp/extractor/nfl.py
yt_dlp/extractor/nhk.py
@@ -505,7 +544,6 @@ yt_dlp/extractor/nintendo.py
yt_dlp/extractor/nitter.py
yt_dlp/extractor/njpwworld.py
yt_dlp/extractor/nobelprize.py
-yt_dlp/extractor/noco.py
yt_dlp/extractor/nonktube.py
yt_dlp/extractor/noodlemagazine.py
yt_dlp/extractor/noovo.py
@@ -547,12 +585,14 @@ yt_dlp/extractor/outsidetv.py
yt_dlp/extractor/packtpub.py
yt_dlp/extractor/palcomp3.py
yt_dlp/extractor/pandoratv.py
+yt_dlp/extractor/panopto.py
yt_dlp/extractor/paramountplus.py
yt_dlp/extractor/parliamentliveuk.py
yt_dlp/extractor/parlview.py
yt_dlp/extractor/patreon.py
yt_dlp/extractor/pbs.py
yt_dlp/extractor/pearvideo.py
+yt_dlp/extractor/peekvids.py
yt_dlp/extractor/peertube.py
yt_dlp/extractor/peertv.py
yt_dlp/extractor/peloton.py
@@ -562,6 +602,7 @@ yt_dlp/extractor/periscope.py
yt_dlp/extractor/philharmoniedeparis.py
yt_dlp/extractor/phoenix.py
yt_dlp/extractor/photobucket.py
+yt_dlp/extractor/piapro.py
yt_dlp/extractor/picarto.py
yt_dlp/extractor/piksel.py
yt_dlp/extractor/pinkbike.py
@@ -574,11 +615,13 @@ yt_dlp/extractor/playfm.py
yt_dlp/extractor/playplustv.py
yt_dlp/extractor/plays.py
yt_dlp/extractor/playstuff.py
+yt_dlp/extractor/playsuisse.py
yt_dlp/extractor/playtvak.py
yt_dlp/extractor/playvid.py
yt_dlp/extractor/playwire.py
yt_dlp/extractor/pluralsight.py
yt_dlp/extractor/plutotv.py
+yt_dlp/extractor/podchaser.py
yt_dlp/extractor/podomatic.py
yt_dlp/extractor/pokemon.py
yt_dlp/extractor/pokergo.py
@@ -595,6 +638,7 @@ yt_dlp/extractor/pornhub.py
yt_dlp/extractor/pornotube.py
yt_dlp/extractor/pornovoisines.py
yt_dlp/extractor/pornoxo.py
+yt_dlp/extractor/premiershiprugby.py
yt_dlp/extractor/presstv.py
yt_dlp/extractor/projectveritas.py
yt_dlp/extractor/prosiebensat1.py
@@ -630,11 +674,10 @@ yt_dlp/extractor/reuters.py
yt_dlp/extractor/reverbnation.py
yt_dlp/extractor/rice.py
yt_dlp/extractor/rmcdecouverte.py
-yt_dlp/extractor/ro220.py
yt_dlp/extractor/rockstargames.py
+yt_dlp/extractor/rokfin.py
yt_dlp/extractor/roosterteeth.py
yt_dlp/extractor/rottentomatoes.py
-yt_dlp/extractor/roxwel.py
yt_dlp/extractor/rozhlas.py
yt_dlp/extractor/rtbf.py
yt_dlp/extractor/rte.py
@@ -647,6 +690,7 @@ yt_dlp/extractor/rts.py
yt_dlp/extractor/rtve.py
yt_dlp/extractor/rtvnh.py
yt_dlp/extractor/rtvs.py
+yt_dlp/extractor/rtvslo.py
yt_dlp/extractor/ruhd.py
yt_dlp/extractor/rule34video.py
yt_dlp/extractor/rumble.py
@@ -663,6 +707,7 @@ yt_dlp/extractor/sbs.py
yt_dlp/extractor/screencast.py
yt_dlp/extractor/screencastomatic.py
yt_dlp/extractor/scrippsnetworks.py
+yt_dlp/extractor/scrolller.py
yt_dlp/extractor/scte.py
yt_dlp/extractor/seeker.py
yt_dlp/extractor/senategov.py
@@ -697,7 +742,6 @@ yt_dlp/extractor/sovietscloset.py
yt_dlp/extractor/spankbang.py
yt_dlp/extractor/spankwire.py
yt_dlp/extractor/spiegel.py
-yt_dlp/extractor/spiegeltv.py
yt_dlp/extractor/spike.py
yt_dlp/extractor/sport5.py
yt_dlp/extractor/sportbox.py
@@ -709,6 +753,7 @@ yt_dlp/extractor/sprout.py
yt_dlp/extractor/srgssr.py
yt_dlp/extractor/srmediathek.py
yt_dlp/extractor/stanfordoc.py
+yt_dlp/extractor/startrek.py
yt_dlp/extractor/startv.py
yt_dlp/extractor/steam.py
yt_dlp/extractor/stitcher.py
@@ -722,15 +767,16 @@ yt_dlp/extractor/streetvoice.py
yt_dlp/extractor/stretchinternet.py
yt_dlp/extractor/stripchat.py
yt_dlp/extractor/stv.py
+yt_dlp/extractor/substack.py
yt_dlp/extractor/sunporno.py
yt_dlp/extractor/sverigesradio.py
yt_dlp/extractor/svt.py
yt_dlp/extractor/swrmediathek.py
yt_dlp/extractor/syfy.py
+yt_dlp/extractor/syvdk.py
yt_dlp/extractor/sztvhu.py
yt_dlp/extractor/tagesschau.py
yt_dlp/extractor/tass.py
-yt_dlp/extractor/tastytrade.py
yt_dlp/extractor/tbs.py
yt_dlp/extractor/tdslifeway.py
yt_dlp/extractor/teachable.py
@@ -745,6 +791,7 @@ yt_dlp/extractor/tele5.py
yt_dlp/extractor/telebruxelles.py
yt_dlp/extractor/telecinco.py
yt_dlp/extractor/telegraaf.py
+yt_dlp/extractor/telegram.py
yt_dlp/extractor/telemb.py
yt_dlp/extractor/telemundo.py
yt_dlp/extractor/telequebec.py
@@ -755,9 +802,9 @@ yt_dlp/extractor/tenplay.py
yt_dlp/extractor/testurl.py
yt_dlp/extractor/tf1.py
yt_dlp/extractor/tfo.py
+yt_dlp/extractor/theholetv.py
yt_dlp/extractor/theintercept.py
yt_dlp/extractor/theplatform.py
-yt_dlp/extractor/thescene.py
yt_dlp/extractor/thestar.py
yt_dlp/extractor/thesun.py
yt_dlp/extractor/theta.py
@@ -785,8 +832,8 @@ yt_dlp/extractor/trueid.py
yt_dlp/extractor/trunews.py
yt_dlp/extractor/trutv.py
yt_dlp/extractor/tube8.py
+yt_dlp/extractor/tubetugraz.py
yt_dlp/extractor/tubitv.py
-yt_dlp/extractor/tudou.py
yt_dlp/extractor/tumblr.py
yt_dlp/extractor/tunein.py
yt_dlp/extractor/tunepk.py
@@ -803,6 +850,7 @@ yt_dlp/extractor/tvanouvelles.py
yt_dlp/extractor/tvc.py
yt_dlp/extractor/tver.py
yt_dlp/extractor/tvigle.py
+yt_dlp/extractor/tviplayer.py
yt_dlp/extractor/tvland.py
yt_dlp/extractor/tvn24.py
yt_dlp/extractor/tvnet.py
@@ -849,13 +897,13 @@ yt_dlp/extractor/vice.py
yt_dlp/extractor/vidbit.py
yt_dlp/extractor/viddler.py
yt_dlp/extractor/videa.py
+yt_dlp/extractor/videocampus_sachsen.py
yt_dlp/extractor/videodetective.py
yt_dlp/extractor/videofyme.py
yt_dlp/extractor/videomore.py
yt_dlp/extractor/videopress.py
yt_dlp/extractor/vidio.py
yt_dlp/extractor/vidlii.py
-yt_dlp/extractor/vidzi.py
yt_dlp/extractor/vier.py
yt_dlp/extractor/viewlift.py
yt_dlp/extractor/viidea.py
@@ -880,7 +928,6 @@ yt_dlp/extractor/vrt.py
yt_dlp/extractor/vrv.py
yt_dlp/extractor/vshare.py
yt_dlp/extractor/vtm.py
-yt_dlp/extractor/vube.py
yt_dlp/extractor/vuclip.py
yt_dlp/extractor/vupload.py
yt_dlp/extractor/vvvvid.py
@@ -888,6 +935,7 @@ yt_dlp/extractor/vyborymos.py
yt_dlp/extractor/vzaar.py
yt_dlp/extractor/wakanim.py
yt_dlp/extractor/walla.py
+yt_dlp/extractor/wasdtv.py
yt_dlp/extractor/washingtonpost.py
yt_dlp/extractor/wat.py
yt_dlp/extractor/watchbox.py
@@ -897,7 +945,9 @@ yt_dlp/extractor/webcaster.py
yt_dlp/extractor/webofstories.py
yt_dlp/extractor/weibo.py
yt_dlp/extractor/weiqitv.py
+yt_dlp/extractor/wetv.py
yt_dlp/extractor/whowatch.py
+yt_dlp/extractor/wikimedia.py
yt_dlp/extractor/willow.py
yt_dlp/extractor/wimtv.py
yt_dlp/extractor/wistia.py
@@ -911,6 +961,7 @@ yt_dlp/extractor/xfileshare.py
yt_dlp/extractor/xhamster.py
yt_dlp/extractor/xiami.py
yt_dlp/extractor/ximalaya.py
+yt_dlp/extractor/xinpianchang.py
yt_dlp/extractor/xminus.py
yt_dlp/extractor/xnxx.py
yt_dlp/extractor/xstream.py
@@ -934,7 +985,6 @@ yt_dlp/extractor/yourporn.py
yt_dlp/extractor/yourupload.py
yt_dlp/extractor/youtube.py
yt_dlp/extractor/zapiks.py
-yt_dlp/extractor/zaq1.py
yt_dlp/extractor/zattoo.py
yt_dlp/extractor/zdf.py
yt_dlp/extractor/zee5.py
diff --git a/pkg/yt-dlp/sha256 b/pkg/yt-dlp/sha256
@@ -1 +1 @@
-c8dd119c28a5d256322ddb3a2fff72bc02ace43fc5880c0065d97f7a48d7a8e3 yt-dlp.tar.gz
+d2531dc0d17b78209ac21cbf4e228c5a41b5aca97b46a256c33574ed2176bff2 yt-dlp.tar.gz
diff --git a/pkg/yt-dlp/url b/pkg/yt-dlp/url
@@ -1 +1 @@
-url = "https://github.com/yt-dlp/yt-dlp/releases/download/2022.02.04/yt-dlp.tar.gz"
+url = "https://github.com/yt-dlp/yt-dlp/releases/download/2022.07.18/yt-dlp.tar.gz"
diff --git a/pkg/yt-dlp/ver b/pkg/yt-dlp/ver
@@ -1 +1 @@
-2022.02.04 r0
+2022.07.18 r0