@@ -56,8 +56,9 @@ def select_artist(artists, rofi: Rofi):
56
56
57
57
58
58
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 )
61
62
62
63
return albums [index ]['album' ]
63
64
@@ -71,17 +72,17 @@ def select_genre(genres, rofi: Rofi):
71
72
def select_track (tracks , rofi : Rofi , discs = False , cycle = True ):
72
73
extras = ['All' ]
73
74
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 ])
75
76
if len (disc_numbers ) > 1 :
76
77
extras .append ('Disc...' )
77
78
78
79
display_tracks = extras + [
79
80
'[%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 ) )
85
86
for track in tracks ]
86
87
87
88
prev_index = - 1
@@ -98,7 +99,7 @@ def select_track(tracks, rofi: Rofi, discs=False, cycle=True):
98
99
def select_disc (tracks , rofi : Rofi , music_library , cycle = True , enable_disc_names = True ):
99
100
discs = {}
100
101
for track in tracks :
101
- disc_num = track . get ('disc' ) or 1
102
+ disc_num = get_tag ('disc' , track )
102
103
if disc_num not in discs :
103
104
discs [disc_num ] = (get_disc_name (track , music_library , enable_disc_names ))
104
105
@@ -131,16 +132,35 @@ def get_album_date(client, album, artist=None):
131
132
if len (tracks ) > 0 :
132
133
for track in tracks :
133
134
if 'date' in track :
134
- return get_epoch_from_date (track [ 'date' ] )
135
+ return get_epoch_from_date (get_tag ( 'date' , track ) )
135
136
136
137
return LONG_TIME_AGO
137
138
138
139
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
+
139
159
def get_disc_name (track , music_library , enable_disc_names = True ):
140
160
name = 'Disc %s' % track .get ('disc' ) or 1
141
161
142
162
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 ) ))
144
164
if 'TSST' in tags :
145
165
name += ': ' + tags ['TSST' ][0 ]
146
166
if 'TXXX:TSST' in tags :
@@ -185,10 +205,10 @@ def get_tracks(client, rofi):
185
205
tracks = client .find ('artist' , artist , 'album' , album )
186
206
187
207
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 )
192
212
))
193
213
194
214
return tracks
@@ -232,21 +252,21 @@ def run():
232
252
cycle = cycle_tracks ):
233
253
if track == 'All' :
234
254
for track in tracks :
235
- client .add (track [ 'file' ] )
255
+ client .add (get_tag ( 'file' , track ) )
236
256
237
257
elif track == 'Disc...' :
238
258
for disc in select_disc (tracks , rofi , music_directory , cycle = cycle_discs ,
239
259
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 ]
241
261
242
262
for track in disc_tracks :
243
- client .add (track [ 'file' ] )
263
+ client .add (get_tag ( 'file' , track ) )
244
264
245
265
if not cycle_discs :
246
266
break
247
267
248
268
else :
249
- client .add (track [ 'file' ] )
269
+ client .add (get_tag ( 'file' , track ) )
250
270
251
271
play_on_add = None
252
272
if 'play_on_add' in config :
0 commit comments