summaryrefslogtreecommitdiffstats
path: root/apps/menus/playlist_menu.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/menus/playlist_menu.c')
-rw-r--r--apps/menus/playlist_menu.c20
1 files changed, 17 insertions, 3 deletions
diff --git a/apps/menus/playlist_menu.c b/apps/menus/playlist_menu.c
index 0983f9c338..49ff56795a 100644
--- a/apps/menus/playlist_menu.c
+++ b/apps/menus/playlist_menu.c
@@ -51,19 +51,33 @@ int save_playlist_screen(struct playlist_info* playlist)
uint32_t resume_elapsed;
uint32_t resume_offset;
- char temp[MAX_PATH+1], *dot;
+ char temp[MAX_PATH+1], *p;
int len;
playlist_get_name(playlist, temp, sizeof(temp)-1);
len = strlen(temp);
- dot = strrchr(temp, '.');
- if (!dot && len <= 1)
+ if (len <= 1) /* root or dynamic playlist */
{
catalog_get_directory(temp, sizeof(temp));
strlcat(temp, DEFAULT_DYNAMIC_PLAYLIST_NAME, sizeof(temp));
}
+ else if (!strcmp((temp + len - 1), "/")) /* dir playlists other than root */
+ {
+ temp[len - 1] = '\0';
+ catalog_get_directory(directoryonly, sizeof(directoryonly));
+
+ if ((p = strrchr(temp, '/'))) /* use last path component as playlist name */
+ {
+ strlcat(directoryonly, p, sizeof(directoryonly));
+ strlcat(directoryonly, ".m3u8", sizeof(directoryonly));
+ }
+ else
+ strlcat(directoryonly, DEFAULT_DYNAMIC_PLAYLIST_NAME, sizeof(directoryonly));
+
+ strmemccpy(temp, directoryonly, sizeof(temp));
+ }
if (catalog_pick_new_playlist_name(temp, sizeof(temp),
playlist ? playlist->filename :