summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
Diffstat (limited to 'apps')
-rw-r--r--apps/plugin.c2
-rw-r--r--apps/plugin.h5
-rw-r--r--apps/plugins/pictureflow/pictureflow.c37
3 files changed, 32 insertions, 12 deletions
diff --git a/apps/plugin.c b/apps/plugin.c
index 31990a9b00..eba2c28b33 100644
--- a/apps/plugin.c
+++ b/apps/plugin.c
@@ -655,6 +655,8 @@ static const struct plugin_api rockbox_api = {
655 playlist_sync, 655 playlist_sync,
656 playlist_remove_all_tracks, 656 playlist_remove_all_tracks,
657 playlist_create, 657 playlist_create,
658 playlist_insert_track,
659 playlist_shuffle,
658}; 660};
659 661
660int plugin_load(const char* plugin, const void* parameter) 662int plugin_load(const char* plugin, const void* parameter)
diff --git a/apps/plugin.h b/apps/plugin.h
index 6f5a6940e7..6c2c903308 100644
--- a/apps/plugin.h
+++ b/apps/plugin.h
@@ -128,7 +128,7 @@ void* plugin_get_buffer(size_t *buffer_size);
128#define PLUGIN_MAGIC 0x526F634B /* RocK */ 128#define PLUGIN_MAGIC 0x526F634B /* RocK */
129 129
130/* increase this every time the api struct changes */ 130/* increase this every time the api struct changes */
131#define PLUGIN_API_VERSION 154 131#define PLUGIN_API_VERSION 155
132 132
133/* update this to latest version if a change to the api struct breaks 133/* update this to latest version if a change to the api struct breaks
134 backwards compatibility (and please take the opportunity to sort in any 134 backwards compatibility (and please take the opportunity to sort in any
@@ -817,6 +817,9 @@ struct plugin_api {
817 void (*playlist_sync)(struct playlist_info* playlist); 817 void (*playlist_sync)(struct playlist_info* playlist);
818 int (*playlist_remove_all_tracks)(struct playlist_info *playlist); 818 int (*playlist_remove_all_tracks)(struct playlist_info *playlist);
819 int (*playlist_create)(const char *dir, const char *file); 819 int (*playlist_create)(const char *dir, const char *file);
820 int (*playlist_insert_track)(struct playlist_info* playlist,
821 const char *filename, int position, bool queue, bool sync);
822 int (*playlist_shuffle)(int random_seed, int start_index);
820}; 823};
821 824
822/* plugin header */ 825/* plugin header */
diff --git a/apps/plugins/pictureflow/pictureflow.c b/apps/plugins/pictureflow/pictureflow.c
index de9859897c..cd8ef1a29f 100644
--- a/apps/plugins/pictureflow/pictureflow.c
+++ b/apps/plugins/pictureflow/pictureflow.c
@@ -2330,27 +2330,42 @@ void select_prev_track(void)
2330 */ 2330 */
2331void start_playback(void) 2331void start_playback(void)
2332{ 2332{
2333 static int old_playlist = -1; 2333 static int old_playlist = -1, old_shuffle = 0;
2334 if (center_slide.slide_index == old_playlist) 2334 int count = 0;
2335 int position = selected_track;
2336 int shuffle = rb->global_settings->playlist_shuffle;
2337 /* reuse existing playlist if possible
2338 * regenerate if shuffle is on or changed, since playlist index and
2339 * selected track are "out of sync" */
2340 if (!shuffle && center_slide.slide_index == old_playlist
2341 && (old_shuffle == shuffle))
2335 { 2342 {
2336 rb->playlist_start(selected_track, 0); 2343 goto play;
2337 } 2344 }
2338 /* First, replace the current playlist with a new one */ 2345 /* First, replace the current playlist with a new one */
2339 else if ((rb->playlist_remove_all_tracks(NULL) == 0) && 2346 else if (rb->playlist_remove_all_tracks(NULL) == 0
2340 (rb->playlist_create(PLUGIN_DEMOS_DIR, NULL) == 0)) 2347 && rb->playlist_create(NULL, NULL) == 0)
2341 { 2348 {
2342 int count = 0;
2343 do { 2349 do {
2344 if (rb->playlist_add(get_track_filename(count)) != 0) 2350 rb->yield();
2351 if (rb->playlist_insert_track(NULL, get_track_filename(count),
2352 PLAYLIST_INSERT_LAST, false, true) < 0)
2345 break; 2353 break;
2346 } while(++count < track_count); 2354 } while(++count < track_count);
2347
2348 rb->playlist_sync(NULL); 2355 rb->playlist_sync(NULL);
2349
2350 rb->playlist_start(selected_track, 0);
2351 } 2356 }
2357 else
2358 return;
2359
2360 if (rb->global_settings->playlist_shuffle)
2361 position = rb->playlist_shuffle(*rb->current_tick, selected_track);
2362play:
2363 /* TODO: can we adjust selected_track if !play_selected ?
2364 * if shuffle, we can't predict the playing track easily, and for either
2365 * case the track list doesn't get auto scrolled*/
2366 rb->playlist_start(position, 0);
2352 old_playlist = center_slide.slide_index; 2367 old_playlist = center_slide.slide_index;
2353 2368 old_shuffle = shuffle;
2354} 2369}
2355 2370
2356/** 2371/**