diff --git a/src/cmd.py b/src/cmd.py index 387e476..0ec188d 100644 --- a/src/cmd.py +++ b/src/cmd.py @@ -17,7 +17,7 @@ from src.quality import get_available_song_audio_quality from src.rip import rip_song, rip_album, rip_artist, rip_playlist from src.types import GlobalAuthParams from src.url import AppleMusicURL, URLType, Song -from src.utils import get_song_id_from_m3u8 +from src.utils import get_song_id_from_m3u8, check_dep class NewInteractiveShell: @@ -30,6 +30,12 @@ class NewInteractiveShell: parser: argparse.ArgumentParser def __init__(self, loop: asyncio.AbstractEventLoop): + dep_installed, missing_dep = check_dep() + if not dep_installed: + logger.error(f"Dependence {missing_dep} was not installed!") + loop.stop() + sys.exit() + self.loop = loop self.config = Config.load_from_config() init_client_and_lock(self.config.download.proxy, self.config.download.parallelNum) diff --git a/src/utils.py b/src/utils.py index a95799e..704aff7 100644 --- a/src/utils.py +++ b/src/utils.py @@ -1,4 +1,5 @@ import asyncio +import subprocess import sys import time from datetime import datetime, timedelta @@ -49,7 +50,7 @@ def find_best_codec(parsed_m3u8: m3u8.M3U8, codec: str, alacMax, atmosMax) -> Op available_medias.append(playlist) else: available_medias.append(playlist) - + if not available_medias: return None available_medias.sort(key=lambda x: x.stream_info.average_bandwidth, reverse=True) @@ -206,3 +207,12 @@ def playlist_write_song_index(playlist: PlaylistInfo): def convent_mac_timestamp_to_datetime(timestamp: int): d = datetime.strptime("01-01-1904", "%m-%d-%Y") return d + timedelta(seconds=timestamp) + + +def check_dep(): + for dep in ["ffmpeg", "gpac", "mp4box", "mp4edit", "mp4extract", "adb"]: + try: + subprocess.run(dep, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) + except FileNotFoundError: + return False, dep + return True, None