summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorChristian Soffke <christian.soffke@gmail.com>2022-04-18 11:35:20 +0200
committerSolomon Peachy <pizza@shaftnet.org>2022-08-05 11:39:35 -0400
commitcef9fa22ef11511f6d174b1e92f3350e514ef7d7 (patch)
tree2c86560670f19bfef62800b46066c967d2c111e3 /apps
parent3edf3ba18d5def6a03f65ccbd878558f98a2d70c (diff)
downloadrockbox-cef9fa22ef11511f6d174b1e92f3350e514ef7d7.tar.gz
rockbox-cef9fa22ef11511f6d174b1e92f3350e514ef7d7.zip
playlist viewer: enable hotkey
'File Browser' hotkeys can now be used while browsing a playlist. The manual has been updated to reflect this and to say that the File Browser hotkey works in the context of the database as well (existing behavior) Change-Id: I51b23e82e0fb00772efdb8784db966d454fb2560
Diffstat (limited to 'apps')
-rw-r--r--apps/playlist_viewer.c165
1 files changed, 114 insertions, 51 deletions
diff --git a/apps/playlist_viewer.c b/apps/playlist_viewer.c
index 8403aea6b6..7e50c42bdc 100644
--- a/apps/playlist_viewer.c
+++ b/apps/playlist_viewer.c
@@ -510,6 +510,17 @@ static enum pv_onplay_result show_track_info(const struct playlist_entry *curren
510 viewer.num_tracks) ? PV_ONPLAY_USB : PV_ONPLAY_UNCHANGED; 510 viewer.num_tracks) ? PV_ONPLAY_USB : PV_ONPLAY_UNCHANGED;
511} 511}
512 512
513
514static enum pv_onplay_result open_with(const struct playlist_entry *current_track)
515{
516 char selected_track[MAX_PATH];
517 close_playlist_viewer();
518 snprintf(selected_track, sizeof(selected_track), "%s", current_track->name);
519
520 return (filetype_list_viewers(selected_track) ==
521 PLUGIN_USB_CONNECTED ? PV_ONPLAY_USB_CLOSED : PV_ONPLAY_CLOSED);
522}
523
513#ifdef HAVE_TAGCACHE 524#ifdef HAVE_TAGCACHE
514static enum pv_onplay_result open_pictureflow(const struct playlist_entry *current_track) 525static enum pv_onplay_result open_pictureflow(const struct playlist_entry *current_track)
515{ 526{
@@ -522,6 +533,31 @@ static enum pv_onplay_result open_pictureflow(const struct playlist_entry *curre
522} 533}
523#endif 534#endif
524 535
536static enum pv_onplay_result delete_track(int current_track_index,
537 int index, bool current_was_playing)
538{
539 playlist_delete(viewer.playlist, current_track_index);
540 if (current_was_playing)
541 {
542 if (playlist_amount_ex(viewer.playlist) <= 0)
543 audio_stop();
544 else
545 {
546 /* Start playing new track except if it's the lasttrack
547 track in the playlist and repeat mode is disabled */
548 struct playlist_entry *current_track =
549 playlist_buffer_get_track(&viewer.buffer, index);
550 if (current_track->display_index != viewer.num_tracks ||
551 global_settings.repeat_mode == REPEAT_ALL)
552 {
553 audio_play(0, 0);
554 viewer.current_playing_track = -1;
555 }
556 }
557 }
558 return PV_ONPLAY_ITEM_REMOVED;
559}
560
525/* Menu of playlist commands. Invoked via ON+PLAY on main viewer screen. */ 561/* Menu of playlist commands. Invoked via ON+PLAY on main viewer screen. */
526static enum pv_onplay_result onplay_menu(int index) 562static enum pv_onplay_result onplay_menu(int index)
527{ 563{
@@ -539,7 +575,7 @@ static enum pv_onplay_result onplay_menu(int index)
539#endif 575#endif
540 ); 576 );
541 577
542 bool current = (current_track->index == viewer.current_playing_track); 578 bool current_was_playing = (current_track->index == viewer.current_playing_track);
543 579
544 result = do_menu(&menu_items, NULL, NULL, false); 580 result = do_menu(&menu_items, NULL, NULL, false);
545 if (result == MENU_ATTACHED_USB) 581 if (result == MENU_ATTACHED_USB)
@@ -565,27 +601,7 @@ static enum pv_onplay_result onplay_menu(int index)
565 ret = PV_ONPLAY_UNCHANGED; 601 ret = PV_ONPLAY_UNCHANGED;
566 break; 602 break;
567 case 2: 603 case 2:
568 /* delete track */ 604 ret = delete_track(current_track->index, index, current_was_playing);
569 playlist_delete(viewer.playlist, current_track->index);
570 if (current)
571 {
572 if (playlist_amount_ex(viewer.playlist) <= 0)
573 audio_stop();
574 else
575 {
576 /* Start playing new track except if it's the lasttrack
577 track in the playlist and repeat mode is disabled */
578 current_track =
579 playlist_buffer_get_track(&viewer.buffer, index);
580 if (current_track->display_index!=viewer.num_tracks ||
581 global_settings.repeat_mode == REPEAT_ALL)
582 {
583 audio_play(0, 0);
584 viewer.current_playing_track = -1;
585 }
586 }
587 }
588 ret = PV_ONPLAY_ITEM_REMOVED;
589 break; 605 break;
590 case 3: 606 case 3:
591 /* move track */ 607 /* move track */
@@ -724,6 +740,40 @@ static int playlist_callback_voice(int selected_item, void *data)
724 return 0; 740 return 0;
725} 741}
726 742
743static void update_lists(struct gui_synclist * playlist_lists)
744{
745 gui_synclist_set_voice_callback(playlist_lists,
746 global_settings.talk_file?
747 &playlist_callback_voice:NULL);
748 gui_synclist_set_icon_callback(playlist_lists,
749 global_settings.playlist_viewer_icons?
750 &playlist_callback_icons:NULL);
751 gui_synclist_set_title(playlist_lists, str(LANG_PLAYLIST), Icon_Playlist);
752 gui_synclist_draw(playlist_lists);
753 gui_synclist_speak_item(playlist_lists);
754}
755
756static bool update_viewer_with_changes(struct gui_synclist *playlist_lists, enum pv_onplay_result res)
757{
758 bool exit = false;
759 if (res == PV_ONPLAY_CHANGED ||
760 res == PV_ONPLAY_ITEM_REMOVED)
761 {
762 if (res == PV_ONPLAY_ITEM_REMOVED)
763 gui_synclist_del_item(playlist_lists);
764 update_playlist(true);
765 if (viewer.num_tracks <= 0)
766 exit = true;
767 if (viewer.selected_track >= viewer.num_tracks)
768 viewer.selected_track = viewer.num_tracks-1;
769 dirty = true;
770 }
771 /* the show_icons option in the playlist viewer settings
772 * menu might have changed */
773 update_lists(playlist_lists);
774 return exit;
775}
776
727static void prepare_lists(struct gui_synclist * playlist_lists) 777static void prepare_lists(struct gui_synclist * playlist_lists)
728{ 778{
729 gui_synclist_init(playlist_lists, playlist_callback_name, 779 gui_synclist_init(playlist_lists, playlist_callback_name,
@@ -907,26 +957,7 @@ enum playlist_viewer_result playlist_viewer_ex(const char* filename)
907 goto exit; 957 goto exit;
908 break; 958 break;
909 } 959 }
910 else if (pv_onplay_result == PV_ONPLAY_CHANGED || 960 exit = update_viewer_with_changes(&playlist_lists, pv_onplay_result);
911 pv_onplay_result == PV_ONPLAY_ITEM_REMOVED)
912 {
913 if (pv_onplay_result == PV_ONPLAY_ITEM_REMOVED)
914 gui_synclist_del_item(&playlist_lists);
915 update_playlist(true);
916 if (viewer.num_tracks <= 0)
917 exit = true;
918 if (viewer.selected_track >= viewer.num_tracks)
919 viewer.selected_track = viewer.num_tracks-1;
920 dirty = true;
921 }
922 /* the show_icons option in the playlist viewer settings
923 * menu might have changed */
924 gui_synclist_set_icon_callback(&playlist_lists,
925 global_settings.playlist_viewer_icons?
926 &playlist_callback_icons:NULL);
927 gui_synclist_set_title(&playlist_lists, playlist_lists.title, playlist_lists.title_icon);
928 gui_synclist_draw(&playlist_lists);
929 gui_synclist_speak_item(&playlist_lists);
930 break; 961 break;
931 } 962 }
932 case ACTION_STD_MENU: 963 case ACTION_STD_MENU:
@@ -938,18 +969,50 @@ enum playlist_viewer_result playlist_viewer_ex(const char* filename)
938 { 969 {
939 quick_screen_quick(button); 970 quick_screen_quick(button);
940 update_playlist(true); 971 update_playlist(true);
941 gui_synclist_set_voice_callback(&playlist_lists, 972 update_lists(&playlist_lists);
942 global_settings.talk_file?
943 &playlist_callback_voice:NULL);
944 gui_synclist_set_icon_callback(&playlist_lists,
945 global_settings.playlist_viewer_icons?
946 &playlist_callback_icons:NULL);
947 gui_synclist_set_title(&playlist_lists, str(LANG_PLAYLIST), Icon_Playlist);
948 gui_synclist_draw(&playlist_lists);
949 gui_synclist_speak_item(&playlist_lists);
950 break; 973 break;
951 } 974 }
952#endif 975#endif
976#ifdef HAVE_HOTKEY
977 case ACTION_TREE_HOTKEY:
978 {
979 struct playlist_entry *current_track = playlist_buffer_get_track(
980 &viewer.buffer,
981 viewer.selected_track);
982 enum pv_onplay_result (*do_plugin)(const struct playlist_entry *) = NULL;
983#ifdef HAVE_TAGCACHE
984 if (global_settings.hotkey_tree == HOTKEY_PICTUREFLOW)
985 do_plugin = &open_pictureflow;
986#endif
987 if (global_settings.hotkey_tree == HOTKEY_OPEN_WITH)
988 do_plugin = &open_with;
989
990 if (do_plugin != NULL)
991 {
992 if (do_plugin(current_track) == PV_ONPLAY_USB_CLOSED)
993 return PLAYLIST_VIEWER_USB;
994 else if (!open_playlist_viewer(filename, &playlist_lists, true))
995 goto exit;
996 }
997 else if (global_settings.hotkey_tree == HOTKEY_PROPERTIES)
998 {
999 if (show_track_info(current_track) == PV_ONPLAY_USB)
1000 {
1001 ret = PLAYLIST_VIEWER_USB;
1002 goto exit;
1003 }
1004 update_lists(&playlist_lists);
1005 }
1006 else if (global_settings.hotkey_tree == HOTKEY_DELETE)
1007 exit = update_viewer_with_changes(&playlist_lists,
1008 delete_track(current_track->index,
1009 viewer.selected_track,
1010 (current_track->index == viewer.current_playing_track)));
1011 else
1012 onplay(current_track->name, FILE_ATTR_AUDIO, CONTEXT_STD, true);
1013 break;
1014 }
1015#endif /* HAVE_HOTKEY */
953 default: 1016 default:
954 if(default_event_handler(button) == SYS_USB_CONNECTED) 1017 if(default_event_handler(button) == SYS_USB_CONNECTED)
955 { 1018 {