aboutsummaryrefslogtreecommitdiff
path: root/yt_dlp/YoutubeDL.py
diff options
context:
space:
mode:
Diffstat (limited to 'yt_dlp/YoutubeDL.py')
-rw-r--r--yt_dlp/YoutubeDL.py42
1 files changed, 22 insertions, 20 deletions
diff --git a/yt_dlp/YoutubeDL.py b/yt_dlp/YoutubeDL.py
index 3293a9076..7026822b6 100644
--- a/yt_dlp/YoutubeDL.py
+++ b/yt_dlp/YoutubeDL.py
@@ -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):