diff --git a/apps/menus/playlist_menu.c b/apps/menus/playlist_menu.c index bfb94ccdad..4e01b29103 100644 --- a/apps/menus/playlist_menu.c +++ b/apps/menus/playlist_menu.c @@ -48,6 +48,21 @@ int save_playlist_screen(struct playlist_info* playlist) char temp[MAX_PATH+1], *p; int len; + bool audio_stopped = !(audio_status() & AUDIO_STATUS_PLAY); + + /* After a reboot, we may need to resume the playlist + first, or it will not contain any indices when + user selects "Save Current Playlist" from playlist + catalogue's context menu in root menu */ + if (!playlist && audio_stopped && !playlist_get_current()->started) + { + if (!file_exists(PLAYLIST_CONTROL_FILE) || playlist_resume() == -1) + { + splash(HZ, ID2P(LANG_CATALOG_NO_PLAYLISTS)); + return 0; + } + } + catalog_get_directory(directoryonly, sizeof(directoryonly)); playlist_get_name(playlist, temp, sizeof(temp)-1); diff --git a/apps/playlist.c b/apps/playlist.c index c843e646d9..de6a47d3e6 100644 --- a/apps/playlist.c +++ b/apps/playlist.c @@ -2048,6 +2048,7 @@ struct playlist_info* playlist_load(const char* dir, const char* file, { playlist->max_playlist_size = current_playlist.max_playlist_size; playlist->indices = current_playlist.indices; + current_playlist.started = false; } new_playlist_unlocked(playlist, dir, file); diff --git a/apps/playlist_viewer.c b/apps/playlist_viewer.c index 3cb1047583..4426d0da81 100644 --- a/apps/playlist_viewer.c +++ b/apps/playlist_viewer.c @@ -387,7 +387,7 @@ static bool playlist_viewer_init(struct playlist_viewer * viewer, if (!filename && !is_playing) { /* Try to restore the list from control file */ - if (playlist_resume() == -1) + if (!file_exists(PLAYLIST_CONTROL_FILE) || playlist_resume() == -1) { /* Nothing to view, exit */ splash(HZ, ID2P(LANG_CATALOG_NO_PLAYLISTS));