summaryrefslogtreecommitdiff
path: root/playlist.c
diff options
context:
space:
mode:
authorGravatar Alexey Yakovenko <wakeroid@gmail.com>2009-10-18 19:14:19 +0200
committerGravatar Alexey Yakovenko <wakeroid@gmail.com>2009-10-18 19:14:19 +0200
commit0415b1ec23934e833b5d859aed0f12565c65b526 (patch)
tree26d0dabd7e0de3c1e64ffdbb1136ce7ae0773b15 /playlist.c
parentfca50d0be2ee6393edb111372305efaeb09ecf36 (diff)
new custom columns WIP
Diffstat (limited to 'playlist.c')
-rw-r--r--playlist.c73
1 files changed, 73 insertions, 0 deletions
diff --git a/playlist.c b/playlist.c
index 0da4820e..8f1910f6 100644
--- a/playlist.c
+++ b/playlist.c
@@ -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;
+}
+