summaryrefslogtreecommitdiff
path: root/apps/plugins/pictureflow/pictureflow.c
diff options
context:
space:
mode:
authorChristian Soffke <christian.soffke@gmail.com>2022-01-02 13:59:20 +0100
committerWilliam Wilgus <me.theuser@yahoo.com>2022-01-04 18:04:53 -0500
commitde8ee6c9e98af821bcf1579ea2edac2a561a2fee (patch)
tree8b40b12bead6babbb92e1dd3cd8a8371c75cff32 /apps/plugins/pictureflow/pictureflow.c
parentd183959676bd269d1f2252517c4dac750c985482 (diff)
downloadrockbox-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/pictureflow/pictureflow.c')
-rw-r--r--apps/plugins/pictureflow/pictureflow.c45
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
3647static 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
3657static 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
3636static bool playlist_insert(int position, bool queue, bool create_new) 3669static 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: