From a6bf6f27587279defb29118b44f9cf82f5bfdc5a Mon Sep 17 00:00:00 2001 From: nathom Date: Tue, 30 Mar 2021 10:15:25 -0700 Subject: [PATCH] Add support for interactive mode on Windows --- requirements.txt | 2 +- streamrip/core.py | 49 +++++++++++++++++++++++++++++++++-------------- 2 files changed, 36 insertions(+), 15 deletions(-) diff --git a/requirements.txt b/requirements.txt index b55408f..6e12bbc 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,6 +5,6 @@ pathvalidate requests mutagen tqdm -simple-term-menu pycryptodome +pick colorama diff --git a/streamrip/core.py b/streamrip/core.py index d52aa84..c3c493e 100644 --- a/streamrip/core.py +++ b/streamrip/core.py @@ -1,12 +1,12 @@ import logging import os import re +import sys from getpass import getpass from string import Formatter from typing import Generator, Optional, Tuple, Union import click -from simple_term_menu import TerminalMenu from .clients import DeezerClient, QobuzClient, TidalClient from .config import Config @@ -280,17 +280,38 @@ class MusicDL(list): break return self.preview_media(results[int("".join(num)) - 1]) - menu = TerminalMenu( - map(title, enumerate(results)), - preview_command=from_title, - preview_size=0.5, - title=f"{capitalize(source)} {media_type} search", - cycle_cursor=True, - clear_screen=True, - ) - choice = menu.show() - if choice is None: - return False - else: - self.append(results[choice]) + if os.name == "nt": + try: + from pick import pick + except (ImportError, ModuleNotFoundError): + click.secho("Run `pip3 install windows-curses` to use interactive mode.", fg='red') + sys.exit() + + choice = pick( + tuple(enumerate(results)), + title=f"{capitalize(source)} {media_type} search. Press RETURN to download, ctrl-C to exit.", + options_map_func=title, + ) + self.append(choice[0][1]) return True + else: + try: + from simple_term_menu import TerminalMenu + except (ImportError, ModuleNotFoundError): + click.secho("Run `pip3 install simple-term-menu` to use interactive mode.", fg='red') + sys.exit() + + menu = TerminalMenu( + map(title, enumerate(results)), + preview_command=from_title, + preview_size=0.5, + title=f"{capitalize(source)} {media_type} search. Press ENTER to download, ESC to exit.", + cycle_cursor=True, + clear_screen=True, + ) + choice = menu.show() + if choice is None: + return False + else: + self.append(results[choice]) + return True