Skip to content

Commit 148f079

Browse files
committed
fix: crashes handling certain oddly formed tags
1 parent b3a38e9 commit 148f079

File tree

1 file changed

+39
-19
lines changed

1 file changed

+39
-19
lines changed

rofi_mpd/rofi_mpd.py

+39-19
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,9 @@ def select_artist(artists, rofi: Rofi):
5656

5757

5858
def select_album(albums, rofi: Rofi):
59-
index = select(['[%s] %s' % (get_epoch_as_year(album['date']), album['album']) for album in albums],
60-
'Select album', rofi)
59+
index = select(
60+
['[%s] %s' % (get_epoch_as_year(int(get_tag('date', album))), get_tag('album', album)) for album in albums],
61+
'Select album', rofi)
6162

6263
return albums[index]['album']
6364

@@ -71,17 +72,17 @@ def select_genre(genres, rofi: Rofi):
7172
def select_track(tracks, rofi: Rofi, discs=False, cycle=True):
7273
extras = ['All']
7374
if discs:
74-
disc_numbers = set([track['disc'] if 'disc' in track else 1 for track in tracks])
75+
disc_numbers = set([get_tag('disc', track) for track in tracks])
7576
if len(disc_numbers) > 1:
7677
extras.append('Disc...')
7778

7879
display_tracks = extras + [
7980
'[%s.%s] \t%s [%s - %s]' % (
80-
track['disc'] if 'disc' in track else 1,
81-
track['track'] if 'track' in track else 0,
82-
track['title'] if 'title' in track else 'N/A',
83-
track['album'] if 'album' in track else 'N/A',
84-
track['artist'] if 'artist' in track else 'N/A')
81+
get_tag('disc', track),
82+
get_tag('track', track),
83+
get_tag('title', track),
84+
get_tag('album', track),
85+
get_tag('artist', track))
8586
for track in tracks]
8687

8788
prev_index = -1
@@ -98,7 +99,7 @@ def select_track(tracks, rofi: Rofi, discs=False, cycle=True):
9899
def select_disc(tracks, rofi: Rofi, music_library, cycle=True, enable_disc_names=True):
99100
discs = {}
100101
for track in tracks:
101-
disc_num = track.get('disc') or 1
102+
disc_num = get_tag('disc', track)
102103
if disc_num not in discs:
103104
discs[disc_num] = (get_disc_name(track, music_library, enable_disc_names))
104105

@@ -131,16 +132,35 @@ def get_album_date(client, album, artist=None):
131132
if len(tracks) > 0:
132133
for track in tracks:
133134
if 'date' in track:
134-
return get_epoch_from_date(track['date'])
135+
return get_epoch_from_date(get_tag('date', track))
135136

136137
return LONG_TIME_AGO
137138

138139

140+
def get_tag(tag: str, track):
141+
if tag == 'track' or tag == 'disc':
142+
func = int
143+
default = 1
144+
else:
145+
func = str
146+
default = 'N/A'
147+
148+
if tag in track:
149+
value = track[tag]
150+
151+
if type(value) == list:
152+
return func(value[0])
153+
else:
154+
return func(value)
155+
else:
156+
return default
157+
158+
139159
def get_disc_name(track, music_library, enable_disc_names=True):
140160
name = 'Disc %s' % track.get('disc') or 1
141161

142162
if enable_disc_names:
143-
tags = mutagen.File(os.path.join(music_library, track['file']))
163+
tags = mutagen.File(os.path.join(music_library, get_tag('file', track)))
144164
if 'TSST' in tags:
145165
name += ': ' + tags['TSST'][0]
146166
if 'TXXX:TSST' in tags:
@@ -185,10 +205,10 @@ def get_tracks(client, rofi):
185205
tracks = client.find('artist', artist, 'album', album)
186206

187207
tracks.sort(key=lambda t: (
188-
t['artist'] if 'artist' in t else '',
189-
t['album'] if 'album' in t else '',
190-
int(t['disc']) if 'disc' in t else 1,
191-
int(t['track']) if 'track' in t else 1
208+
get_tag('artist', t),
209+
get_tag('album', t),
210+
get_tag('disc', t),
211+
get_tag('track', t)
192212
))
193213

194214
return tracks
@@ -232,21 +252,21 @@ def run():
232252
cycle=cycle_tracks):
233253
if track == 'All':
234254
for track in tracks:
235-
client.add(track['file'])
255+
client.add(get_tag('file', track))
236256

237257
elif track == 'Disc...':
238258
for disc in select_disc(tracks, rofi, music_directory, cycle=cycle_discs,
239259
enable_disc_names=config['enable_disc_names']):
240-
disc_tracks = [track for track in tracks if track.get('disc') == disc]
260+
disc_tracks = [track for track in tracks if get_tag('disc', track) == disc]
241261

242262
for track in disc_tracks:
243-
client.add(track['file'])
263+
client.add(get_tag('file', track))
244264

245265
if not cycle_discs:
246266
break
247267

248268
else:
249-
client.add(track['file'])
269+
client.add(get_tag('file', track))
250270

251271
play_on_add = None
252272
if 'play_on_add' in config:

0 commit comments

Comments
 (0)