plugins: random folder advance: misc improvements

fixes:
- traverse_dir was called recursively using two
  MAX_PATH local buffers => possible stack overflow
- The import function inserted additional, incorrect,
  entries when the whole line buffer was filled
- "Dirs not found" message overlapped number
  of folders when generating folder list
- Final number of scanned folders wasn't displayed
- Wouldn't stop inserting when maximum number
  of files in playlist was already reached
- Prevent buffer overflow when importing
- Don't write to fd after opening failed
- Use whole buffer with read_line, instead
  of subtracting 1. Remove hard coded sizes
- CRs don't need to be removed in import function
  (already handled by read_line)

features:
- Use insert context for *much* faster insertion
  of large # of folders, and nicer progress display
- Use UI viewport
- Add progress indicator when saving or loading
- Display number of folders in edit list title
- Go back to plugin's main menu from edit list
- Only ask to save changes if list is dirty
- Warn before erasing modified playlist
- Flag successfully created playlist as modified
- Make folder scan wait for dircache
- Shorten menu item names
- Put "Play Shuffled" menu item first
- Remember selection when returning from submenus
- Go to WPS after ACTION_TREE_WPS
- Exit menu when pressing Back
- Perform an initial scan, if no data file exists
  yet, when "Play Shuffled" or "Edit" is selected

Change-Id: I7df76f8fb8387888ce491d8b74b01b481e9997d3
This commit is contained in:
Christian Soffke 2026-01-01 19:26:06 +01:00
parent fcb2289274
commit f0d99391de
9 changed files with 582 additions and 428 deletions

View file

@ -357,7 +357,10 @@ static const struct plugin_api rockbox_api = {
simplelist_show_list,
yesno_pop,
yesno_pop_confirm,
/* status bar */
sb_set_title_text,
sb_set_persistent_title,
/* action handling */
get_custom_action,
@ -738,6 +741,8 @@ static const struct plugin_api rockbox_api = {
playlist_insert_track,
playlist_insert_directory,
playlist_insert_playlist,
playlist_insert_context_create,
playlist_insert_context_release,
playlist_shuffle,
warn_on_pl_erase,
audio_play,
@ -874,7 +879,6 @@ static const struct plugin_api rockbox_api = {
/* new stuff at the end, sort into place next time
the API gets incompatible */
sb_set_persistent_title,
};
static int plugin_buffer_handle;