diff options
author | 2011-04-06 20:27:25 +0200 | |
---|---|---|
committer | 2011-04-06 20:27:25 +0200 | |
commit | dad7bd60114f28a438339c8269bdf92d780fdf75 (patch) | |
tree | c8a10ff7f20901f49f32cc489f7587d4c0975a62 /playlist.c | |
parent | 4dfff06c7130978769db2b7eafbb640f6cb6ed01 (diff) |
%t title formatting will give filename without ext, if title is not set
Diffstat (limited to 'playlist.c')
-rw-r--r-- | playlist.c | 54 |
1 files changed, 35 insertions, 19 deletions
@@ -2872,7 +2872,25 @@ pl_format_title_int (const char *escape_chars, playItem_t *it, int idx, char *s, else if (*fmt == 't') { meta = pl_find_meta (it, "title"); if (!meta) { - meta = "?"; + const char *f = pl_find_meta (it, ":URI"); + const char *start = strrchr (f, '/'); + if (start) { + start++; + } + else { + start = f; + } + const char *end = strrchr (start, '.'); + if (end) { + int n = end-start; + n = min (end-start, sizeof (dirname)-1); + strncpy (dirname, start, n); + dirname[n] = 0; + meta = dirname; + } + else { + meta = "?"; + } } } else if (*fmt == 'b') { @@ -2935,13 +2953,15 @@ pl_format_title_int (const char *escape_chars, playItem_t *it, int idx, char *s, } } else if (*fmt == 'f') { - meta = pl_find_meta (it, ":URI") + strlen (pl_find_meta (it, ":URI")) - 1; - while (meta > pl_find_meta (it, ":URI") && (*meta) != '/') { - meta--; - } - if (*meta == '/') { + const char *f = pl_find_meta (it, ":URI"); + meta = strrchr (f, '/'); + if (meta) { meta++; } + else { + meta = f; + } + printf ("meta: %s\n", meta); } else if (*fmt == 'F') { meta = pl_find_meta (it, ":URI"); @@ -2991,17 +3011,15 @@ pl_format_title_int (const char *escape_chars, playItem_t *it, int idx, char *s, } else if (*fmt == 'd') { // directory - const char *end = pl_find_meta (it, ":URI") + strlen (pl_find_meta (it, ":URI")) - 1; - while (end > pl_find_meta (it, ":URI") && (*end) != '/') { - end--; - } - if (*end != '/') { + const char *f = pl_find_meta (it, ":URI"); + const char *end = strrchr (f, '/'); + if (!end) { meta = ""; // got relative path without folder (should not happen) } else { const char *start = end; start--; - while (start > pl_find_meta (it, ":URI") && (*start != '/')) { + while (start > f && (*start != '/')) { start--; } @@ -3018,19 +3036,17 @@ pl_format_title_int (const char *escape_chars, playItem_t *it, int idx, char *s, } } else if (*fmt == 'D') { + const char *f = pl_find_meta (it, ":URI"); // directory with path - const char *end = pl_find_meta (it, ":URI") + strlen (pl_find_meta (it, ":URI")) - 1; - while (end > pl_find_meta (it, ":URI") && (*end) != '/') { - end--; - } - if (*end != '/') { + const char *end = strrchr (f, '/'); + if (!end) { meta = ""; // got relative path without folder (should not happen) } else { // copy - int len = end - pl_find_meta (it, ":URI"); + int len = end - f; len = min (len, sizeof (dirname)-1); - strncpy (dirname, pl_find_meta (it, ":URI"), len); + strncpy (dirname, f, len); dirname[len] = 0; meta = dirname; } |