diff --git a/apps/bookmark.c b/apps/bookmark.c index 0b468bdb76..3db049475d 100644 --- a/apps/bookmark.c +++ b/apps/bookmark.c @@ -1291,7 +1291,8 @@ bool bookmark_exists(void) char* name = playlist_get_name(NULL, global_temp_buffer, sizeof(global_temp_buffer)); - if (generate_bookmark_file_name(bm_filename, sizeof(bm_filename), name, -1)) + if (!playlist_dynamic_only() && + generate_bookmark_file_name(bm_filename, sizeof(bm_filename), name, -1)) { exist = file_exists(bm_filename); } @@ -1311,8 +1312,10 @@ bool bookmark_is_bookmarkable_state(void) /* no track playing */ (playlist_get_resume_info(&resume_index) == -1) || /* invalid queue info */ - (playlist_modified(NULL))) - /* can't bookmark while in the queue */ + (playlist_modified(NULL)) || + /* can't bookmark playlists modified by user */ + (playlist_dynamic_only())) + /* can't bookmark playlists without associated folder or playlist file */ { return false; } diff --git a/apps/playlist.c b/apps/playlist.c index 554e1afd7e..4440c77dbf 100644 --- a/apps/playlist.c +++ b/apps/playlist.c @@ -2698,6 +2698,22 @@ bool playlist_allow_dirplay(const struct playlist_info *playlist) return !!(playlist->flags & PLAYLIST_FLAG_DIRPLAY); } +/* + * Returns true if the current playlist is neither + * associated with a folder nor with an on-disk playlist. + */ +bool playlist_dynamic_only(void) +{ + /* NOTE: New dynamic playlists currently use root dir ("/") + * as their placeholder filename – this could change. + */ + if (!strcmp(current_playlist.filename, "/") && + !(current_playlist.flags & PLAYLIST_FLAG_DIRPLAY)) + return true; + + return false; +} + /* * Move track at index to new_index. Tracks between the two are shifted * appropriately. Returns 0 on success and -1 on failure. diff --git a/apps/playlist.h b/apps/playlist.h index 4c8800e594..101a3c1207 100644 --- a/apps/playlist.h +++ b/apps/playlist.h @@ -133,6 +133,7 @@ int playlist_get_display_index(void); int playlist_amount(void); void playlist_set_last_shuffled_start(void); struct playlist_info *playlist_get_current(void); +bool playlist_dynamic_only(void); /* Exported functions for all playlists. Pass NULL for playlist_info structure to work with current playlist. */