from musicutil.types import File from musicutil.utils.load_tag_information import load_tag_information from musicutil.utils.scan_for_music import scan_for_music from html import escape as escape_html class GenHTMLArgs(): src: str dest: str title: str description: str by_folder: bool def add_genhtml_command(subparsers): genhtml_parser = subparsers.add_parser('genhtml') genhtml_parser.add_argument( 'src', type=str, help='src base music directory') genhtml_parser.add_argument( 'dest', type=str, help='dest html file') genhtml_parser.add_argument( 'title', type=str, help='title') genhtml_parser.add_argument( 'description', type=str, help='description') genhtml_parser.add_argument( '--by-folder', action='store_true') def get_genhtml_args(args) -> GenHTMLArgs: command_args = GenHTMLArgs() command_args.src = args.src command_args.dest = args.dest command_args.title = args.title command_args.description = args.description command_args.by_folder = args.by_folder return command_args def make_table_for_files(files: list[File], by_folder: bool = False) -> str: html_content = "" path_head = "Path" if not by_folder else "" html_content += f""" {path_head} """ isOdd = True print(files) for file in files: tdClass = "pure-table-odd" if isOdd else "pure-table-even" data_path = escape_html(file.path_from_src) data_title = escape_html(file.tags.title) data_artist = escape_html(file.tags.artist) data_extension = escape_html(file.extension) path_data = f"" if not by_folder else "" html_content += f""" {path_data} """ isOdd = not isOdd html_content += """
Title Artist Format
{data_path}
{data_title} {data_artist} {data_extension}
""" return html_content class GenHTMLCommand(): def __init__(self, args: GenHTMLArgs): 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 files.sort(key=lambda file: file.tags.artist) files.sort(key=lambda file: file.tags.title) files.sort(key=lambda file: file.path_from_src) html_content = "" html_content += f""" {self.args.title} """ if self.args.by_folder: files_per_folder: dict[str, list[File]] = {} for file in files: if not file.path_from_src in files_per_folder.keys(): files_per_folder[file.path_from_src] = [] files_per_folder[file.path_from_src].append(file) for folder in files_per_folder.keys(): folder_name = folder folder_files = files_per_folder[folder_name] html_content += f"

{folder_name}

" html_content += make_table_for_files(folder_files, True) else: html_content += make_table_for_files(files) html_content += """ """ print("Writing HTML...") with open(self.args.dest, "w+") as html_file: html_file.write(html_content)