diff --git a/README.md b/README.md index ed5c10a..7d2294f 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,11 @@ # Karaokatalog -Tools to manage an Ultrastar DX song library. Features include: +Tools to manage an UltraStar DX song library. Features include: 1. Deduplication 2. Organization 3. Recoding +4. Jsonification ## Setup @@ -55,3 +56,13 @@ python3 -m karaokatalog.organize $SONG_LIBRARY ```bash python3 -m karaokatalog.recode $SONG_LIBRARY ``` + +### Jsonification + +**Create a `songs.json` file with some song metadata in the root library dir.** + +ℹ️ This operation is risk-free: If a `songs.json` already exists, it is kept intact (so no data loss possible). + +```bash +python3 -m karaokatalog.jsonify $SONG_LIBRARY +``` diff --git a/karaokatalog/jsonify/__init__.py b/karaokatalog/jsonify/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/karaokatalog/jsonify/__main__.py b/karaokatalog/jsonify/__main__.py new file mode 100644 index 0000000..98bc0d6 --- /dev/null +++ b/karaokatalog/jsonify/__main__.py @@ -0,0 +1,30 @@ +import json +import logging + +from karaokatalog.get_parser import get_parser +from karaokatalog.Library import Library + +logging.basicConfig( + format="%(asctime)s [%(levelname)s] %(message)s", level=logging.INFO +) + + +if __name__ == "__main__": + args = get_parser( + "jsonify", "Create a JSON file containing metadata of all songs in the library" + ).parse_args() + logging.info("Karaokatalog Jsonification started") + + logging.info("Loading library") + library = Library.from_dir(args.library_path) + logging.info("Library loaded") + + songs = [song.as_dict() for song in library.songs] + json_path = args.library_path / "songs.json" + + logging.info(f"Writing JSON to {json_path}") + + with json_path.open("x", encoding="utf-8") as f: + json.dump(songs, f, ensure_ascii=False, indent=4) + + logging.info("Karaokatalog Jsonification done")