You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

49 lines
2.1 KiB
Python

import argparse
import os
import sys
import logging
import yaml
def path_to_aax(aax : str):
if not os.path.isfile(aax):
raise argparse.ArgumentTypeError(f"Pfad {aax} ist keine g<>ltige Datei.")
if not aax.endswith('.aax'):
raise argparse.ArgumentTypeError(f"Pfad {aax} ist keine g<>ltige aax-Datei.")
return aax
if __name__ == "__main__":
argparser = argparse.ArgumentParser(description="Dieses Script konvertiert verschl<68>sselte Audible B<>cher zu unverschl<68>sselte m4b-Audiobooks.")
cmd_parser = argparser.add_subparsers(dest='cmd', title='Commands', description="Erlaubte Commands", required=True)
decrypt_parser = cmd_parser.add_parser('decrypt', help="Extrahiert die User-spezifische ID zur Profil-Bildung von einer bestehenden aax-Datei.")
decrypt_parser.add_argument('aax', type=path_to_aax, help='Path zu einem zu entschl<68>sselnden aax file des neuen Profils')
decrypt_parser.add_argument('profile', type=str, help='Profil-Name, zu welchem die extrahierte ID gespeichert wird. (ID ist notwendig f<>r Entschl<68>sselung der eigenen H<>rb<72>cher)')
convert_parser = cmd_parser.add_parser('convert', help="Konvertiert ein aax-Audiobook in ein m4b-Audiobook.")
convert_parser.add_argument('aax', type=path_to_aax, help='Path zu einem zu entschl<68>sselnden aax file')
convert_parser.add_argument('profile', type=str, help="Zugeh<EFBFBD>riges Profile f<>r entschl<68>sselung")
args: argparse.Namespace = argparser.parse_args(args=None if sys.argv[1:] else ['--help'])
logging.basicConfig(level=logging.INFO, format="%(asctime)s | %(levelname)s | %(message)s", datefnt="%d-%m-%Y %H:%M:%S")
profiles = None
try:
with open('profiles.yml', 'r') as file:
profiles = yaml.safe_load(file)
except IOError:
with open('profiles.yml', 'w') as file:
profiles = yaml.safe_load('')
if args.cmd == "decrypt":
pass
elif args.cmd == "convert":
if profiles.get(args.profile) is None:
logging.info(f"Profil {args.profile} existiert nicht. Bitte <20>ber decrypt anlegen lassen.")