from musicutil.utils.load_tag_information import load_tag_information from musicutil.utils.scan_for_music import scan_for_music from functools import reduce class StatsArgs(): src: str def add_stats_command(subparsers): stats_parser = subparsers.add_parser('stats') stats_parser.add_argument( 'src', type=str, help='src base music directory') def get_stats_args(args) -> StatsArgs: command_args = StatsArgs() command_args.src = args.src return command_args class StatsCommand(): def __init__(self, args: StatsArgs): self.args = args def run(self): print("Generating HTML...") print("Scanning For Music...") files = scan_for_music(self.args.src) print("Loading Tag Information") for file in files: tags = load_tag_information(file) file.tags = tags # So far we only support MP3 and Flac so only have these mp3_files_count = len([True for file in files if file.extension == "mp3"]) flac_files_count = len([True for file in files if file.extension == "flac"]) lossy_files_count = mp3_files_count lossless_files_count = flac_files_count total_files_count = lossy_files_count + lossless_files_count lossy_percent = (lossy_files_count/total_files_count) lossless_percent = (lossless_files_count/total_files_count) print("Stats:") print(f" Total Files: {total_files_count}") print(f" Lossy#: {lossy_files_count}/{total_files_count}") print(f" Lossless#: {lossless_files_count}/{total_files_count}") print(f" Lossy%: {lossy_percent:.2%}") print(f" Lossless%: {lossless_percent:.2%}")