11import argparse
22import asyncio
33import copy
4- import sys
54import os
5+ import sys
66
77import grpc .aio
88from creart import it
1717from src .logger import GlobalLogger
1818from src .measurer import Measurer
1919from src .qemu import QemuInstance
20- from src .measurer import Measurer
21- from src .qemu import QemuInstance
20+ from src .quality import print_song_quality , print_album_quality , print_playlist_quality , key_to_Headers
2221from src .rip import Ripper
2322from src .url import AppleMusicURL , URLType
2423from src .utils import check_dep , run_sync , safely_create_task , config_outdated
25- from src .quality import print_song_quality , print_album_quality , print_playlist_quality , key_to_Headers
2624
2725
2826class InteractiveShell :
@@ -54,21 +52,23 @@ def __init__(self, loop: asyncio.AbstractEventLoop):
5452 loop .run_until_complete (asyncio .sleep (3 ))
5553 else :
5654 loop .run_until_complete (it (WrapperManager ).init (it (Config ).instance .url , it (Config ).instance .secure ))
57- safely_create_task (it (WrapperManager ).decrypt_init (on_success = self .ripper .on_decrypt_success , on_failure = self .ripper .on_decrypt_failed ))
55+ safely_create_task (it (WrapperManager ).decrypt_init (on_success = self .ripper .on_decrypt_success ,
56+ on_failure = self .ripper .on_decrypt_failed ))
5857 try :
5958 loop .run_until_complete (self .show_status ())
6059 except grpc .aio ._call .AioRpcError :
6160 it (GlobalLogger ).logger .error ("Unable to connect to the wrapper-manager" )
6261 sys .exit ()
6362
6463 if config_outdated ():
65- it (GlobalLogger ).logger .warning ("The configuration file is out of date. Please refer to config.example.toml to update it" )
64+ it (GlobalLogger ).logger .warning (
65+ "The configuration file is out of date. Please refer to config.example.toml to update it" )
6666
6767 self .parser = argparse .ArgumentParser (exit_on_error = False )
6868 subparser = self .parser .add_subparsers ()
6969 download_parser = subparser .add_parser ("download" , aliases = ["dl" ])
7070 quality_parser = subparser .add_parser ("quality" , aliases = ["qa" ])
71- download_parser .add_argument ("url" , nargs = '*' , type = str )
71+ download_parser .add_argument ("url" , nargs = '*' , type = str )
7272 download_parser .add_argument ("-c" , "--codec" ,
7373 choices = ["alac" , "ec3" , "aac" , "aac-binaural" , "aac-downmix" , "aac-legacy" , "ac3" ],
7474 default = "alac" )
@@ -77,8 +77,8 @@ def __init__(self, loop: asyncio.AbstractEventLoop):
7777 download_parser .add_argument ("-l" , "--language" , default = it (Config ).region .language , action = "store" )
7878 download_parser .add_argument ("--include-participate-songs" , default = False , dest = "include" , action = "store_true" )
7979
80- quality_parser .add_argument ("url" , nargs = '*' , type = str )
81- quality_parser .add_argument ("-i" ,"--invert" , default = False , action = "store_true" )
80+ quality_parser .add_argument ("url" , nargs = '*' , type = str )
81+ quality_parser .add_argument ("-i" , "--invert" , default = False , action = "store_true" )
8282 quality_parser .add_argument ("--codec-id" , default = True , action = "store_false" )
8383 quality_parser .add_argument ("--codec" , default = True , action = "store_false" )
8484 quality_parser .add_argument ("--bitrate" , default = True , action = "store_false" )
@@ -99,7 +99,8 @@ async def show_status(self):
9999 it (WrapperManager ).status .cache_invalidate ()
100100 st_resp = await it (WrapperManager ).status ()
101101 if not st_resp .regions :
102- it (GlobalLogger ).logger .error ("The currently used wrapper-manager instance has no available account. Please execute login command to log in." )
102+ it (GlobalLogger ).logger .error (
103+ "The currently used wrapper-manager instance has no available account. Please execute login command to log in." )
103104 it (GlobalLogger ).logger .info (f"Regions available on wrapper-manager instance: { ', ' .join (st_resp .regions )} " )
104105
105106 async def handle_batch_mode (self , args , cmds ):
@@ -108,16 +109,17 @@ async def handle_batch_mode(self, args, cmds):
108109 self .batch_mode = True
109110 self .batch_args = args
110111 self .batch_command = cmds [0 ]
111- it (GlobalLogger ).logger .info ("Entering batch mode. Enter one or more URLs per line (space-separated), type 'exit' to quit" )
112+ it (GlobalLogger ).logger .info (
113+ "Entering batch mode. Enter one or more URLs per line (space-separated), type 'exit' to quit" )
112114 except :
113115 pass
114-
116+
115117 async def batch_mode_parser (self , cmds : str ):
116- args = self .batch_args
117- args .url = copy .deepcopy (cmds )
118- if cmds [0 ]!= "exit" :
118+ args = self .batch_args
119+ args .url = copy .deepcopy (cmds )
120+ if cmds [0 ] != "exit" :
119121 cmds [0 ] = self .batch_command
120- return cmds ,args
122+ return cmds , args
121123
122124 async def command_parser (self , cmd : str ):
123125 if not cmd .strip ():
@@ -139,15 +141,15 @@ async def command_parser(self, cmd: str):
139141 await self .show_status ()
140142 case "exit" :
141143 if self .batch_mode :
142- self .batch_mode = False
144+ self .batch_mode = False
143145 it (GlobalLogger ).logger .info ("Batch mode exited. Returning to normal command mode." )
144146 else :
145147 self .handle_exit ()
146148 case "quality" | "qa" :
147- safely_create_task (self .do_quality (args .url , args ))
148-
149+ safely_create_task (self .do_quality (args .url , args ))
149150
150- async def do_download (self , raw_urls : list [str ], codec : str , force_download : bool , language : str , include : bool = False ):
151+ async def do_download (self , raw_urls : list [str ], codec : str , force_download : bool , language : str ,
152+ include : bool = False ):
151153 for raw_url in raw_urls :
152154 url = AppleMusicURL .parse_url (raw_url )
153155 if not url :
@@ -158,18 +160,22 @@ async def do_download(self, raw_urls: list[str], codec: str, force_download: boo
158160 continue
159161 match url .type :
160162 case URLType .Song :
161- safely_create_task (self .ripper .rip_song (url , codec , Flags (force_save = force_download , language = language )))
163+ safely_create_task (
164+ self .ripper .rip_song (url , codec , Flags (force_save = force_download , language = language )))
162165 case URLType .Album :
163- safely_create_task (self .ripper .rip_album (url , codec , Flags (force_save = force_download , language = language )))
166+ safely_create_task (
167+ self .ripper .rip_album (url , codec , Flags (force_save = force_download , language = language )))
164168 case URLType .Artist :
165- safely_create_task (self .ripper .rip_artist (url , codec , Flags (force_save = force_download , language = language ,
166- include_participate_in_works = include )))
169+ safely_create_task (
170+ self .ripper .rip_artist (url , codec , Flags (force_save = force_download , language = language ,
171+ include_participate_in_works = include )))
167172 case URLType .Playlist :
168- safely_create_task (self .ripper .rip_playlist (url , codec , Flags (force_save = force_download , language = language )))
173+ safely_create_task (
174+ self .ripper .rip_playlist (url , codec , Flags (force_save = force_download , language = language )))
169175 case _:
170176 it (GlobalLogger ).logger .error (f"Unsupported URLType - { raw_url } " )
171- continue
172-
177+ continue
178+
173179 async def do_quality (self , raw_urls : list [str ], args ):
174180 all_fields = list (key_to_Headers .keys ())
175181 show_fields = []
@@ -246,7 +252,8 @@ def completer(self):
246252
247253 def handle_exit (self ):
248254 if it (Measurer ).tasks_count () > 0 :
249- it (GlobalLogger ).logger .info ("There is still {} tasks, do you really want to exit? (y/N)" .format (it (Measurer ).tasks_count ()))
255+ it (GlobalLogger ).logger .info (
256+ "There is still {} tasks, do you really want to exit? (y/N)" .format (it (Measurer ).tasks_count ()))
250257 response = input ().strip ().lower ()
251258 if response != 'y' :
252259 return
@@ -255,7 +262,8 @@ def handle_exit(self):
255262 os ._exit (0 )
256263
257264 async def handle_command (self ):
258- session = PromptSession ("> " , bottom_toolbar = self .bottom_toolbar , completer = self .completer (), refresh_interval = 1 )
265+ session = PromptSession ("> " , bottom_toolbar = self .bottom_toolbar , completer = self .completer (),
266+ refresh_interval = 1 )
259267
260268 while True :
261269 try :
@@ -301,11 +309,10 @@ async def logout_flow(self):
301309 it (GlobalLogger ).logger .info ("Logout Success!" )
302310 it (WrapperManager ).status .cache_invalidate ()
303311
304-
305312 async def start (self ):
306313 with patch_stdout ():
307314 try :
308315 await self .handle_command ()
309316 finally :
310317 if it (Config ).localInstance .enable :
311- self .localInstance .terminate ()
318+ self .localInstance .terminate ()
0 commit comments