diff options
author | 2009-10-18 19:14:19 +0200 | |
---|---|---|
committer | 2009-10-18 19:14:19 +0200 | |
commit | 0415b1ec23934e833b5d859aed0f12565c65b526 (patch) | |
tree | 26d0dabd7e0de3c1e64ffdbb1136ce7ae0773b15 /playlist.c | |
parent | fca50d0be2ee6393edb111372305efaeb09ecf36 (diff) |
new custom columns WIP
Diffstat (limited to 'playlist.c')
-rw-r--r-- | playlist.c | 73 |
1 files changed, 73 insertions, 0 deletions
@@ -1375,3 +1375,76 @@ float pl_get_item_duration (playItem_t *it) { return it->_duration; } + +int +pl_format_title (playItem_t *it, char *s, int size, const char *fmt) { + int n = size-1; + while (*fmt && n) { + if (*fmt != '%') { + *s++ = *fmt; + n--; + } + else { + fmt++; + const char *meta = NULL; + if (*fmt == 0) { + break; + } + else if (*fmt == 'a') { + meta = "artist"; + } + else if (*fmt == 't') { + meta = "title"; + } + else if (*fmt == 'b') { + meta = "album"; + } + else if (*fmt == 'n') { + meta = "track"; + } + else if (*fmt == 'l') { + char dur[50]; + if (it->_duration >= 0) { + int hourdur = it->_duration / (60 * 60); + int mindur = (it->_duration - hourdur * 60 * 60) / 60; + int secdur = it->_duration - mindur * 60; + + if (hourdur) { + snprintf (dur, sizeof (dur), "%d:%02d:%02d", hourdur, mindur, secdur); + } + else { + snprintf (dur, sizeof (dur), "%d:%02d", mindur, secdur); + } + } + else { + strcpy (dur, "-:--"); + } + const char *value = dur; + while (n > 0 && *value) { + *s++ = *value++; + n--; + } + } + else { + *s++ = *fmt; + n--; + } + + if (meta) { + const char *value = pl_find_meta (it, meta); + if (!value) { + value = "?"; + } + while (n > 0 && *value) { + *s++ = *value++; + n--; + } + } + } + fmt++; + } + *s = 0; + + return size - n - 1; +} + |