|
|
|
@ -157,7 +157,7 @@ from .utils import (
|
|
|
|
|
write_json_file,
|
|
|
|
|
write_string,
|
|
|
|
|
)
|
|
|
|
|
from .utils._utils import _UnsafeExtensionError, _YDLLogger
|
|
|
|
|
from .utils._utils import _UnsafeExtensionError, _YDLLogger, _ProgressState
|
|
|
|
|
from .utils.networking import (
|
|
|
|
|
HTTPHeaderDict,
|
|
|
|
|
clean_headers,
|
|
|
|
@ -642,20 +642,19 @@ class YoutubeDL:
|
|
|
|
|
self.cache = Cache(self)
|
|
|
|
|
self.__header_cookies = []
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
windows_enable_vt_mode()
|
|
|
|
|
except Exception as e:
|
|
|
|
|
self.write_debug(f'Failed to enable VT mode: {e}')
|
|
|
|
|
|
|
|
|
|
stdout = sys.stderr if self.params.get('logtostderr') else sys.stdout
|
|
|
|
|
self._out_files = Namespace(
|
|
|
|
|
out=stdout,
|
|
|
|
|
error=sys.stderr,
|
|
|
|
|
screen=sys.stderr if self.params.get('quiet') else stdout,
|
|
|
|
|
console=None if os.name == 'nt' else next(
|
|
|
|
|
filter(supports_terminal_sequences, (sys.stderr, sys.stdout)), None),
|
|
|
|
|
console=next(filter(supports_terminal_sequences, (sys.stderr, sys.stdout)), None),
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
windows_enable_vt_mode()
|
|
|
|
|
except Exception as e:
|
|
|
|
|
self.write_debug(f'Failed to enable VT mode: {e}')
|
|
|
|
|
|
|
|
|
|
if self.params.get('no_color'):
|
|
|
|
|
if self.params.get('color') is not None:
|
|
|
|
|
self.params.setdefault('_warnings', []).append(
|
|
|
|
@ -956,21 +955,22 @@ class YoutubeDL:
|
|
|
|
|
self._write_string(f'{self._bidi_workaround(message)}\n', self._out_files.error, only_once=only_once)
|
|
|
|
|
|
|
|
|
|
def _send_console_code(self, code):
|
|
|
|
|
if os.name == 'nt' or not self._out_files.console:
|
|
|
|
|
return
|
|
|
|
|
if not supports_terminal_sequences(self._out_files.console):
|
|
|
|
|
return False
|
|
|
|
|
self._write_string(code, self._out_files.console)
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
def to_console_title(self, message):
|
|
|
|
|
if not self.params.get('consoletitle', False):
|
|
|
|
|
def to_console_title(self, message=None, progress_state=None, percent=None):
|
|
|
|
|
if not self.params.get('consoletitle'):
|
|
|
|
|
return
|
|
|
|
|
message = remove_terminal_sequences(message)
|
|
|
|
|
if os.name == 'nt':
|
|
|
|
|
if ctypes.windll.kernel32.GetConsoleWindow():
|
|
|
|
|
# c_wchar_p() might not be necessary if `message` is
|
|
|
|
|
# already of type unicode()
|
|
|
|
|
ctypes.windll.kernel32.SetConsoleTitleW(ctypes.c_wchar_p(message))
|
|
|
|
|
else:
|
|
|
|
|
self._send_console_code(f'\033]0;{message}\007')
|
|
|
|
|
|
|
|
|
|
if message:
|
|
|
|
|
success = self._send_console_code(f'\033]0;{remove_terminal_sequences(message)}\007')
|
|
|
|
|
if not success and os.name == 'nt' and ctypes.windll.kernel32.GetConsoleWindow():
|
|
|
|
|
ctypes.windll.kernel32.SetConsoleTitleW(message)
|
|
|
|
|
|
|
|
|
|
if isinstance(progress_state, _ProgressState):
|
|
|
|
|
self._send_console_code(progress_state.get_ansi_escape(percent))
|
|
|
|
|
|
|
|
|
|
def save_console_title(self):
|
|
|
|
|
if not self.params.get('consoletitle') or self.params.get('simulate'):
|
|
|
|
@ -984,6 +984,7 @@ class YoutubeDL:
|
|
|
|
|
|
|
|
|
|
def __enter__(self):
|
|
|
|
|
self.save_console_title()
|
|
|
|
|
self.to_console_title(progress_state=_ProgressState.INDETERMINATE)
|
|
|
|
|
return self
|
|
|
|
|
|
|
|
|
|
def save_cookies(self):
|
|
|
|
@ -992,6 +993,7 @@ class YoutubeDL:
|
|
|
|
|
|
|
|
|
|
def __exit__(self, *args):
|
|
|
|
|
self.restore_console_title()
|
|
|
|
|
self.to_console_title(progress_state=_ProgressState.HIDDEN)
|
|
|
|
|
self.close()
|
|
|
|
|
|
|
|
|
|
def close(self):
|
|
|
|
|