summaryrefslogtreecommitdiff
path: root/apps
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
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')
-rw-r--r--apps/plugin.c1
-rw-r--r--apps/plugin.h3
-rw-r--r--apps/plugins/pictureflow/pictureflow.c45
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
811static int plugin_buffer_handle; 812static 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
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: