123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- import argparse
- import config
- import logging
- import media
- import report
- import sys
- import os
- import fstools
-
- try:
- from config import APP_NAME as ROOT_LOGGER_NAME
- except ImportError:
- ROOT_LOGGER_NAME = 'root'
- logger = logging.getLogger(ROOT_LOGGER_NAME).getChild(__name__)
-
-
- def progress_callback_rip(p: float):
- bar_length = 40
- progress = int(bar_length * p)
- out = "\rRipping.... - [ "
- out += "*" * progress
- out += "-" * (bar_length - progress)
- out += " ] %5.1f%%" % (p * 100)
- sys.stdout.write(out)
-
-
- def progress_callback_enc(p: float):
- bar_length = 40
- progress = int(bar_length * p)
- out = "\rEncoding... - [ "
- out += "*" * progress
- out += "-" * (bar_length - progress)
- out += " ] %5.1f%%" % (p * 100)
- sys.stdout.write(out)
-
-
- def cddb_user_callback(what: int, info: dict):
- if what == media.CALLBACK_CDDB_CHOICE:
- keys = tuple(info.keys())
- print("Multiple cddb entries detected:")
- print("-------------------------------")
- for i in range(0, len(keys)):
- print("%2d. %s" % (i + 1, info[keys[i]]))
- n = None
- while not n:
- fb = input("Choose: ")
- try:
- fb = int(fb)
- except ValueError:
- n = None
- else:
- if fb > 0 and fb <= len(keys):
- n = fb
- if n is None:
- print("Use a choice from above!")
- print()
- return keys[n - 1]
- elif what == media.CALLBACK_MAN_INPUT:
- print("No cddb entries detected:")
- print("-------------------------")
- for key in info:
- info[key] = input(key[0].upper() + key[1:] + ": ")
- return info
-
-
- def main(**kwargs):
- disc_data = media.get_media_data(media.get_disc_device(), cddb_user_callback)
-
- if disc_data is None:
- logger.error("Could not reading disc_data")
- sys.exit(1)
- print("Found Disc:")
- print("===========")
- print()
- print(disc_data[media.common.KEY_ARTIST], "-", disc_data[media.common.KEY_ALBUM])
- print("-" * (len(disc_data[media.common.KEY_ARTIST]) + len(disc_data[media.common.KEY_ALBUM]) + 3))
- for track_info in disc_data["tracks"]:
- i = track_info[media.common.KEY_TRACK]
- print("%2d. %s" % (i, track_info[media.common.KEY_TITLE]))
- wavfile = media.track_to_targetpath(kwargs.get("basepath"), track_info, 'wav')
- try:
- fstools.mkdir(os.path.dirname(wavfile))
- except PermissionError:
- logger.exception("Unable to create ripping target path: %s", os.path.dirname(wavfile))
- sys.exit(1)
- rv = media.disc_track_rip(i, wavfile, progress_callback_rip)
- if rv == 0:
- print()
- rv = media.wav_to_mp3(wavfile, kwargs.get("basepath"), track_info, progress_callback_enc)
- print()
- os.remove(wavfile)
- if rv != 0:
- logger.error("Error while ripping or encoding...")
-
-
- if __name__ == "__main__":
- default_baspath = os.path.join(os.getenv("HOME"), "rip")
- parser = argparse.ArgumentParser(description='Description')
- parser.add_argument('-v', '--verbose', help='Description for foo argument', action='store_true')
- parser.add_argument('-b', '--basepath', help=f'The rip and encode basepath (default is {default_baspath})', default=default_baspath)
- args = vars(parser.parse_args())
-
- report.stdoutLoggingConfigure(log_name_lvl=((config.APP_NAME, logging.DEBUG if args.get('verbose') else logging.ERROR),))
-
- main(**args)
|