1
0
Fork 0
forked from len0rd/rockbox

[Feature] filetree fallback to loading a playlist from disk

give user option to load playlist from disk when
namebuffer is too small -- max_playlist size still
limits the total entries but filename length
 won't stop them from playing the directory

Change-Id: I1787689417661ea670a211f575f2c52e84465869
This commit is contained in:
William Wilgus 2023-01-08 09:44:57 -05:00 committed by William Wilgus
parent 593103cd8b
commit 282a54b23c
2 changed files with 26 additions and 4 deletions

View file

@ -72,6 +72,7 @@ static int strnatcasecmp_n(const char *a, const char *b, size_t n)
int ft_build_playlist(struct tree_context* c, int start_index) int ft_build_playlist(struct tree_context* c, int start_index)
{ {
int i; int i;
int res = 0;
int start=start_index; int start=start_index;
tree_lock_cache(c); tree_lock_cache(c);
@ -81,7 +82,8 @@ int ft_build_playlist(struct tree_context* c, int start_index)
{ {
if((entries[i].attr & FILE_ATTR_MASK) == FILE_ATTR_AUDIO) if((entries[i].attr & FILE_ATTR_MASK) == FILE_ATTR_AUDIO)
{ {
if (playlist_add(entries[i].name) < 0) res = playlist_add(entries[i].name);
if (res < 0)
break; break;
} }
else else
@ -92,6 +94,21 @@ int ft_build_playlist(struct tree_context* c, int start_index)
} }
} }
if (res == -2) /* name buffer is full store to disk? */
{
if (yesno_pop(ID2P(LANG_CATALOG_ADD_TO_NEW)))
{
char playlist_dir[MAX_PATH];
strmemccpy(playlist_dir, c->currdir, sizeof(playlist_dir));
tree_unlock_cache(c);
if (playlist_create(playlist_dir, "dynamic.m3u8") >= 0)
{
playlist_insert_directory(NULL, playlist_dir,
PLAYLIST_REPLACE, false, false);
}
}
}
else
tree_unlock_cache(c); tree_unlock_cache(c);
return start_index; return start_index;

View file

@ -2082,8 +2082,13 @@ int playlist_add(const char *filename)
struct playlist_info* playlist = &current_playlist; struct playlist_info* playlist = &current_playlist;
int len = strlen(filename); int len = strlen(filename);
if((len+1 > playlist->buffer_size - playlist->buffer_end_pos) || if(len+1 > playlist->buffer_size - playlist->buffer_end_pos)
(playlist->amount >= playlist->max_playlist_size)) {
notify_buffer_full();
return -2;
}
if(playlist->amount >= playlist->max_playlist_size)
{ {
notify_buffer_full(); notify_buffer_full();
return -1; return -1;