diff options
Diffstat (limited to 'apps')
-rw-r--r-- | apps/plugin.c | 1 | ||||
-rw-r--r-- | apps/plugin.h | 3 | ||||
-rw-r--r-- | apps/plugins/pictureflow/pictureflow.c | 45 |
3 files changed, 44 insertions, 5 deletions
diff --git a/apps/plugin.c b/apps/plugin.c index 0168a26323..aa69b9ca03 100644 --- a/apps/plugin.c +++ b/apps/plugin.c | |||
@@ -806,6 +806,7 @@ static const struct plugin_api rockbox_api = { | |||
806 | playlist_insert_playlist, | 806 | playlist_insert_playlist, |
807 | battery_current, | 807 | battery_current, |
808 | onplay_show_playlist_menu, | 808 | onplay_show_playlist_menu, |
809 | queue_remove_from_head, | ||
809 | }; | 810 | }; |
810 | 811 | ||
811 | static int plugin_buffer_handle; | 812 | static int plugin_buffer_handle; |
diff --git a/apps/plugin.h b/apps/plugin.h index d4d86e50bd..8ade3a05ac 100644 --- a/apps/plugin.h +++ b/apps/plugin.h | |||
@@ -155,7 +155,7 @@ int plugin_open(const char *plugin, const char *parameter); | |||
155 | #define PLUGIN_MAGIC 0x526F634B /* RocK */ | 155 | #define PLUGIN_MAGIC 0x526F634B /* RocK */ |
156 | 156 | ||
157 | /* increase this every time the api struct changes */ | 157 | /* increase this every time the api struct changes */ |
158 | #define PLUGIN_API_VERSION 248 | 158 | #define PLUGIN_API_VERSION 249 |
159 | 159 | ||
160 | /* update this to latest version if a change to the api struct breaks | 160 | /* update this to latest version if a change to the api struct breaks |
161 | backwards compatibility (and please take the opportunity to sort in any | 161 | backwards compatibility (and please take the opportunity to sort in any |
@@ -933,6 +933,7 @@ struct plugin_api { | |||
933 | const char *filename, int position, bool queue); | 933 | const char *filename, int position, bool queue); |
934 | int (*battery_current)(void); | 934 | int (*battery_current)(void); |
935 | void (*onplay_show_playlist_menu)(const char* path, void (*playlist_insert_cb)); | 935 | void (*onplay_show_playlist_menu)(const char* path, void (*playlist_insert_cb)); |
936 | void (*queue_remove_from_head)(struct event_queue *q, long id); | ||
936 | }; | 937 | }; |
937 | 938 | ||
938 | /* plugin header */ | 939 | /* plugin header */ |
diff --git a/apps/plugins/pictureflow/pictureflow.c b/apps/plugins/pictureflow/pictureflow.c index 74146d8172..2bf4127242 100644 --- a/apps/plugins/pictureflow/pictureflow.c +++ b/apps/plugins/pictureflow/pictureflow.c | |||
@@ -151,6 +151,10 @@ const struct button_mapping pf_context_buttons[] = | |||
151 | || (CONFIG_KEYPAD == IPOD_3G_PAD) \ | 151 | || (CONFIG_KEYPAD == IPOD_3G_PAD) \ |
152 | || (CONFIG_KEYPAD == IPOD_4G_PAD) \ | 152 | || (CONFIG_KEYPAD == IPOD_4G_PAD) \ |
153 | || (CONFIG_KEYPAD == MPIO_HD300_PAD) | 153 | || (CONFIG_KEYPAD == MPIO_HD300_PAD) |
154 | {PF_JMP_PREV, BUTTON_LEFT, BUTTON_NONE}, | ||
155 | {PF_JMP_PREV, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE}, | ||
156 | {PF_JMP, BUTTON_RIGHT, BUTTON_NONE}, | ||
157 | {PF_JMP, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE}, | ||
154 | {PF_QUIT, BUTTON_MENU|BUTTON_REPEAT, BUTTON_MENU}, | 158 | {PF_QUIT, BUTTON_MENU|BUTTON_REPEAT, BUTTON_MENU}, |
155 | #elif CONFIG_KEYPAD == IAUDIO_M3_PAD | 159 | #elif CONFIG_KEYPAD == IAUDIO_M3_PAD |
156 | {PF_QUIT, BUTTON_RC_REC, BUTTON_NONE}, | 160 | {PF_QUIT, BUTTON_RC_REC, BUTTON_NONE}, |
@@ -168,10 +172,10 @@ const struct button_mapping pf_context_buttons[] = | |||
168 | {PF_TRACKLIST, BUTTON_FFWD|BUTTON_REL, BUTTON_FFWD}, | 172 | {PF_TRACKLIST, BUTTON_FFWD|BUTTON_REL, BUTTON_FFWD}, |
169 | {PF_WPS, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY}, | 173 | {PF_WPS, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY}, |
170 | #elif CONFIG_KEYPAD == FIIO_M3K_PAD | 174 | #elif CONFIG_KEYPAD == FIIO_M3K_PAD |
171 | {PF_PREV, BUTTON_LEFT, BUTTON_NONE}, | 175 | {PF_JMP_PREV, BUTTON_LEFT, BUTTON_NONE}, |
172 | {PF_PREV_REPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE}, | 176 | {PF_JMP_PREV, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE}, |
173 | {PF_NEXT, BUTTON_RIGHT, BUTTON_NONE}, | 177 | {PF_JMP, BUTTON_RIGHT, BUTTON_NONE}, |
174 | {PF_NEXT_REPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE}, | 178 | {PF_JMP, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE}, |
175 | {PF_MENU, BUTTON_POWER|BUTTON_REL, BUTTON_POWER}, | 179 | {PF_MENU, BUTTON_POWER|BUTTON_REL, BUTTON_POWER}, |
176 | {PF_QUIT, BUTTON_POWER|BUTTON_REPEAT, BUTTON_POWER}, | 180 | {PF_QUIT, BUTTON_POWER|BUTTON_REPEAT, BUTTON_POWER}, |
177 | {PF_CONTEXT, BUTTON_MENU|BUTTON_REL, BUTTON_MENU}, | 181 | {PF_CONTEXT, BUTTON_MENU|BUTTON_REL, BUTTON_MENU}, |
@@ -2969,7 +2973,10 @@ static inline void set_current_slide(const int slide_index) | |||
2969 | step = 0; | 2973 | step = 0; |
2970 | center_index = fbound(slide_index, 0, number_of_slides - 1); | 2974 | center_index = fbound(slide_index, 0, number_of_slides - 1); |
2971 | if (old_center_index != center_index) | 2975 | if (old_center_index != center_index) |
2976 | { | ||
2977 | rb->queue_remove_from_head(&thread_q, EV_WAKEUP); | ||
2972 | rb->queue_post(&thread_q, EV_WAKEUP, 0); | 2978 | rb->queue_post(&thread_q, EV_WAKEUP, 0); |
2979 | } | ||
2973 | target = center_index; | 2980 | target = center_index; |
2974 | slide_frame = slide_index << 16; | 2981 | slide_frame = slide_index << 16; |
2975 | reset_slides(); | 2982 | reset_slides(); |
@@ -3572,6 +3579,12 @@ static void show_track_list(void) | |||
3572 | if ( center_slide.slide_index != pf_tracks.cur_idx ) { | 3579 | if ( center_slide.slide_index != pf_tracks.cur_idx ) { |
3573 | show_track_list_loading(); | 3580 | show_track_list_loading(); |
3574 | create_track_index(center_slide.slide_index); | 3581 | create_track_index(center_slide.slide_index); |
3582 | if (pf_tracks.count == 0) | ||
3583 | { | ||
3584 | pf_state = pf_cover_out; | ||
3585 | free_borrowed_tracks(); | ||
3586 | return; | ||
3587 | } | ||
3575 | reset_track_list(); | 3588 | reset_track_list(); |
3576 | } | 3589 | } |
3577 | int titletxt_w, titletxt_x, color, titletxt_h; | 3590 | int titletxt_w, titletxt_x, color, titletxt_h; |
@@ -3631,6 +3644,26 @@ static void select_prev_track(void) | |||
3631 | } | 3644 | } |
3632 | } | 3645 | } |
3633 | 3646 | ||
3647 | static void select_next_album(void) | ||
3648 | { | ||
3649 | if (center_index < number_of_slides - 1) { | ||
3650 | free_borrowed_tracks(); | ||
3651 | target = center_index + 1; | ||
3652 | set_current_slide(target); | ||
3653 | interrupt_cover_in_animation(); | ||
3654 | } | ||
3655 | } | ||
3656 | |||
3657 | static void select_prev_album(void) | ||
3658 | { | ||
3659 | if (center_index > 0) { | ||
3660 | free_borrowed_tracks(); | ||
3661 | target = center_index - 1; | ||
3662 | set_current_slide(target); | ||
3663 | interrupt_cover_in_animation(); | ||
3664 | } | ||
3665 | } | ||
3666 | |||
3634 | #if PF_PLAYBACK_CAPABLE | 3667 | #if PF_PLAYBACK_CAPABLE |
3635 | 3668 | ||
3636 | static bool playlist_insert(int position, bool queue, bool create_new) | 3669 | static bool playlist_insert(int position, bool queue, bool create_new) |
@@ -4167,6 +4200,8 @@ static int pictureflow_main(const char* selected_file) | |||
4167 | pf_state = pf_idle; | 4200 | pf_state = pf_idle; |
4168 | set_current_slide(get_album_artist_alpha_next_index()); | 4201 | set_current_slide(get_album_artist_alpha_next_index()); |
4169 | } | 4202 | } |
4203 | else if ( pf_state == pf_show_tracks ) | ||
4204 | select_next_album(); | ||
4170 | break; | 4205 | break; |
4171 | case PF_JMP_PREV: | 4206 | case PF_JMP_PREV: |
4172 | if (pf_state == pf_idle || pf_state == pf_scrolling) | 4207 | if (pf_state == pf_idle || pf_state == pf_scrolling) |
@@ -4174,6 +4209,8 @@ static int pictureflow_main(const char* selected_file) | |||
4174 | pf_state = pf_idle; | 4209 | pf_state = pf_idle; |
4175 | set_current_slide(get_album_artist_alpha_prev_index()); | 4210 | set_current_slide(get_album_artist_alpha_prev_index()); |
4176 | } | 4211 | } |
4212 | else if ( pf_state == pf_show_tracks ) | ||
4213 | select_prev_album(); | ||
4177 | break; | 4214 | break; |
4178 | #if PF_PLAYBACK_CAPABLE | 4215 | #if PF_PLAYBACK_CAPABLE |
4179 | case PF_CONTEXT: | 4216 | case PF_CONTEXT: |