diff options
author | Christian Soffke <christian.soffke@gmail.com> | 2022-01-02 13:59:20 +0100 |
---|---|---|
committer | William Wilgus <me.theuser@yahoo.com> | 2022-01-04 18:04:53 -0500 |
commit | de8ee6c9e98af821bcf1579ea2edac2a561a2fee (patch) | |
tree | 8b40b12bead6babbb92e1dd3cd8a8371c75cff32 /apps/plugins | |
parent | d183959676bd269d1f2252517c4dac750c985482 (diff) | |
download | rockbox-de8ee6c9e98af821bcf1579ea2edac2a561a2fee.tar.gz rockbox-de8ee6c9e98af821bcf1579ea2edac2a561a2fee.zip |
PictureFlow: Switch between albums from track view
Prev/next buttons on iPods or Fiio M3k can now
be used to select another album without having to
return to the albums view first. Scroll wheel/strip
handles scrolling up and down in the track list
as before.
Other targets probably have the necessary
buttons for this, so the keymap can be extended
in the future (same goes for alphabetic browsing)
Also prevents queue overflow and handles
failure case for track list tagcache retrieval.
Change-Id: Ic8ff4471e1583d1ab1f7d16911b15705a7f60aca
Diffstat (limited to 'apps/plugins')
-rw-r--r-- | apps/plugins/pictureflow/pictureflow.c | 45 |
1 files changed, 41 insertions, 4 deletions
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: |