Add support for interactive mode on Windows

This commit is contained in:
nathom 2021-03-30 10:15:25 -07:00
parent fd54e301a7
commit a6bf6f2758
2 changed files with 36 additions and 15 deletions

View file

@ -5,6 +5,6 @@ pathvalidate
requests requests
mutagen mutagen
tqdm tqdm
simple-term-menu
pycryptodome pycryptodome
pick
colorama colorama

View file

@ -1,12 +1,12 @@
import logging import logging
import os import os
import re import re
import sys
from getpass import getpass from getpass import getpass
from string import Formatter from string import Formatter
from typing import Generator, Optional, Tuple, Union from typing import Generator, Optional, Tuple, Union
import click import click
from simple_term_menu import TerminalMenu
from .clients import DeezerClient, QobuzClient, TidalClient from .clients import DeezerClient, QobuzClient, TidalClient
from .config import Config from .config import Config
@ -280,11 +280,32 @@ class MusicDL(list):
break break
return self.preview_media(results[int("".join(num)) - 1]) return self.preview_media(results[int("".join(num)) - 1])
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( menu = TerminalMenu(
map(title, enumerate(results)), map(title, enumerate(results)),
preview_command=from_title, preview_command=from_title,
preview_size=0.5, preview_size=0.5,
title=f"{capitalize(source)} {media_type} search", title=f"{capitalize(source)} {media_type} search. Press ENTER to download, ESC to exit.",
cycle_cursor=True, cycle_cursor=True,
clear_screen=True, clear_screen=True,
) )