Skip to content

Commit 5eb4571

Browse files
JanZerebeckiJonas Kramer
authored and
Jonas Kramer
committed
Support tags in the status format.
1 parent bafea74 commit 5eb4571

File tree

1 file changed

+97
-61
lines changed

1 file changed

+97
-61
lines changed

source/interface.c

+97-61
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
#include "xmlrpc.h"
3535
#include "recommend.h"
3636
#include "util.h"
37+
#include "tag.h"
3738

3839
#include "globals.h"
3940

@@ -322,76 +323,111 @@ const char * meta(const char * fmt, int flags, struct hash * track) {
322323
string[length++] = fmt[x++];
323324
}
324325
else {
325-
const char * keys [] = {
326-
"acreator",
327-
"ttitle",
328-
"lalbum",
329-
"Aartistpage",
330-
"Ttrackpage",
331-
"Lalbumpage",
332-
"dduration",
333-
"sstation",
334-
"SstationURL",
335-
"Rremain",
336-
"Iimage"
337-
};
338-
339-
register unsigned i = sizeof(keys) / sizeof(char *);
340-
341-
/* Look for a track value with that format flag. */
342-
while(i--) {
343-
if(fmt[x] == keys[i][0]) {
344-
char * val = strdup(value(track, keys[i] + 1));
345-
const char * color = NULL;
346-
347-
if(flags & M_COLORED) {
348-
char colorkey[64] = { 0 };
349-
snprintf(colorkey, sizeof(colorkey), "%c-color", keys[i][0]);
350-
color = value(& rc, colorkey);
351-
352-
if(color) {
353-
/* Strip leading spaces from end of color (Author: Ondrej Novy) */
354-
char * color_st = strdup(color);
355-
size_t len = strlen(color_st) - 1;
356-
357-
assert(color_st != NULL);
358-
359-
while(isspace(color_st[len]) && len > 0) {
360-
color_st[len] = 0;
361-
len--;
362-
}
363-
length += snprintf(string + length, remn, "\x1B[%sm", color_st);
364-
free(color_st);
365-
}
366-
}
367-
368-
if((flags & M_RELAXPATH) && val) {
369-
unsigned n;
370-
size_t l = strlen(val);
326+
char * val = NULL;
327+
const char * trackKey = NULL;
328+
char taggingItem = 0;
329+
const char * color = NULL;
330+
331+
switch(fmt[x]) {
332+
case 'a':
333+
trackKey = "creator";
334+
break;
335+
case 't':
336+
trackKey = "title";
337+
break;
338+
case 'l':
339+
trackKey = "album";
340+
break;
341+
case 'A':
342+
trackKey = "artistpage";
343+
break;
344+
case 'T':
345+
trackKey = "trackpage";
346+
break;
347+
case 'L':
348+
trackKey = "albumpage";
349+
break;
350+
case 'd':
351+
trackKey = "duration";
352+
break;
353+
case 's':
354+
trackKey = "station";
355+
break;
356+
case 'S':
357+
trackKey = "stationURL";
358+
break;
359+
case 'R':
360+
trackKey = "remain";
361+
break;
362+
case 'I':
363+
trackKey = "image";
364+
break;
365+
case 'Z':
366+
// artist tags
367+
taggingItem = 'a';
368+
break;
369+
case 'D':
370+
// album tags
371+
taggingItem = 'l';
372+
break;
373+
case 'z':
374+
// track tags
375+
taggingItem = 't';
376+
break;
377+
}
378+
if(trackKey) {
379+
val = strdup(value(track, trackKey));
380+
} else if(taggingItem) {
381+
val = oldtags(taggingItem, * track);
382+
if(!val) {
383+
val = strdup("");
384+
}
385+
}
371386

372-
for(n = 0; n < l; ++n) {
373-
if(val[n] == '/')
374-
val[n] = '|';
375-
}
376-
}
387+
if(flags & M_COLORED) {
388+
char colorkey[64] = { 0 };
389+
snprintf(colorkey, sizeof(colorkey), "%c-color", fmt[x]);
390+
color = value(& rc, colorkey);
377391

378-
if(flags & M_SHELLESC) {
379-
char * escaped = shellescape(val);
380-
free(val);
381-
val = escaped;
382-
}
392+
if(color) {
393+
/* Strip leading spaces from end of color (Author: Ondrej Novy) */
394+
char * color_st = strdup(color);
395+
size_t len = strlen(color_st) - 1;
383396

384-
length = strlen(strncat(string, val ? val : "(unknown)", remn));
397+
assert(color_st != NULL);
385398

386-
free(val);
399+
while(isspace(color_st[len]) && len > 0) {
400+
color_st[len] = 0;
401+
len--;
402+
}
403+
length += snprintf(string + length, remn, "\x1B[%sm", color_st);
404+
free(color_st);
405+
}
406+
}
387407

388-
if(color)
389-
length = strlen(strncat(string, "\x1B[0m", remn));
408+
if((flags & M_RELAXPATH) && val) {
409+
unsigned n;
410+
size_t l = strlen(val);
390411

391-
break;
412+
for(n = 0; n < l; ++n) {
413+
if(val[n] == '/')
414+
val[n] = '|';
392415
}
393416
}
394417

418+
if(flags & M_SHELLESC) {
419+
char * escaped = shellescape(val);
420+
free(val);
421+
val = escaped;
422+
}
423+
424+
length = strlen(strncat(string, val ? val : "(unknown)", remn));
425+
426+
free(val);
427+
428+
if(color)
429+
length = strlen(strncat(string, "\x1B[0m", remn));
430+
395431
++x;
396432
}
397433
}

0 commit comments

Comments
 (0)