Compare commits
1 Commits
0b84b8dbcf
...
8dc5e692e8
Author | SHA1 | Date |
---|---|---|
|
8dc5e692e8 |
|
@ -64,7 +64,10 @@ class Status:
|
|||
return Text('Done!')
|
||||
|
||||
|
||||
def format_release(release: Release) -> str:
|
||||
def format_release(release: Optional[Release]) -> str:
|
||||
if release is None:
|
||||
return '[bright_yellow]Unknown[/bright_yellow]'
|
||||
|
||||
more_info = [
|
||||
'[bright_blue]{} disc(s)[/bright_blue]'.format(
|
||||
len(release.medium_list)
|
||||
|
@ -106,13 +109,14 @@ def prompt_menu(console: Console, choices: Iterable[Any]) -> int:
|
|||
console.print(f'[red]Invalid selection: {i}[/red]')
|
||||
continue
|
||||
return i - 1
|
||||
assert False, 'unreachable'
|
||||
|
||||
|
||||
def prompt_release(console: Console, drive: DiscDrive) -> Release:
|
||||
def prompt_release(console: Console, drive: DiscDrive) -> Optional[Release]:
|
||||
releases = get_releases_from_disc(drive.get_disc()).release_list
|
||||
if not releases:
|
||||
console.print('[red]Could not find a matching MusicBrainz release')
|
||||
raise SystemExit(1)
|
||||
return None
|
||||
if len(releases) == 1:
|
||||
return releases[0]
|
||||
console.print(
|
||||
|
@ -181,12 +185,12 @@ def run(
|
|||
release = get_release_by_id(mbid)
|
||||
else:
|
||||
release = prompt_release(console, dev)
|
||||
if not sys.stdout.isatty():
|
||||
if release and not sys.stdout.isatty():
|
||||
print(f'{release.artist_credit_phrase} - {release.title}')
|
||||
console.print(f'Ripping {format_release(release)}')
|
||||
|
||||
num_discs = len(release.medium_list)
|
||||
if len(release.medium_list) > 1:
|
||||
if release and len(release.medium_list) > 1:
|
||||
num_discs = len(release.medium_list)
|
||||
discno = prompt_select_disc(console, num_discs)
|
||||
else:
|
||||
discno = 0
|
||||
|
|
|
@ -173,7 +173,7 @@ class ProcessThread(threading.Thread):
|
|||
|
||||
|
||||
class EncodeThread(threading.Thread):
|
||||
def __init__(self, release: Release, discno: int, q: ProcessQueue) -> None:
|
||||
def __init__(self, release: Optional[Release], discno: int, q: ProcessQueue) -> None:
|
||||
super().__init__(name='EncodeThread')
|
||||
self.release = release
|
||||
self.discno = discno
|
||||
|
@ -207,11 +207,15 @@ class EncodeThread(threading.Thread):
|
|||
|
||||
log.info('Adding tags to %s', filename)
|
||||
trackno = int(filename[5:7])
|
||||
if not self.release:
|
||||
log.warning('Cannot tag track %d: no release metadata', trackno)
|
||||
return
|
||||
artist = self.release.artist_credit[0].artist
|
||||
album = self.release.title
|
||||
medium = self.release.medium_list[self.discno]
|
||||
track = medium.track_list[trackno - 1]
|
||||
tags = mutagen.File(filename, easy=True)
|
||||
assert tags
|
||||
tags['tracknumber'] = str(trackno)
|
||||
tags['artist'] = tags['albumartist'] = artist.name
|
||||
tags['album'] = album
|
||||
|
@ -258,7 +262,7 @@ class Ripper:
|
|||
def __init__(
|
||||
self,
|
||||
device: DiscDrive,
|
||||
release: Release,
|
||||
release: Optional[Release],
|
||||
discno: int,
|
||||
tracks: Optional[TrackList] = None,
|
||||
use_libcdio: bool = False,
|
||||
|
@ -293,14 +297,17 @@ class Ripper:
|
|||
|
||||
def rip(self) -> Iterable[StatusMessage]:
|
||||
start = time.monotonic()
|
||||
dirname = safe_name(
|
||||
f'{self.release.artist_credit_phrase} - {self.release.title}'
|
||||
)
|
||||
if self.release:
|
||||
dirname = safe_name(
|
||||
f'{self.release.artist_credit_phrase} - {self.release.title}'
|
||||
)
|
||||
else:
|
||||
dirname = 'Unknown Artist - Unknown Album'
|
||||
if not os.path.isdir(dirname):
|
||||
log.info('Creating directory: %s', dirname)
|
||||
os.mkdir(dirname)
|
||||
os.chdir(dirname)
|
||||
if len(self.release.medium_list) > 1:
|
||||
if self.release and len(self.release.medium_list) > 1:
|
||||
subdirname = f'Disc {self.discno + 1}'
|
||||
if not os.path.isdir(subdirname):
|
||||
log.info('Creating directory: %s', subdirname)
|
||||
|
|
Loading…
Reference in New Issue