diff options
author | Solomon Peachy <pizza@shaftnet.org> | 2018-10-30 09:45:26 -0400 |
---|---|---|
committer | Solomon Peachy <pizza@shaftnet.org> | 2018-12-15 18:00:23 +0100 |
commit | 4adad0bc1f508360999de176048f89025ce84b3e (patch) | |
tree | 46fed2ec12b60df2d94ba54950c2da798aa9445a /apps/playlist_viewer.c | |
parent | f061330c3d7b17cc770a8eb2c699b5e44995ad1e (diff) | |
download | rockbox-4adad0bc1f508360999de176048f89025ce84b3e.tar.gz rockbox-4adad0bc1f508360999de176048f89025ce84b3e.zip |
FS#6323: Speech for ID3 viewer, playlist catalog and playlist viewer
Modified from original ticket, Taken from Igor Poretsky's tree, and
further modified by myself to incorporate feedback.
Change-Id: Ibc2180e52af76890b1448d23f79386fd0f88f709
Diffstat (limited to 'apps/playlist_viewer.c')
-rw-r--r-- | apps/playlist_viewer.c | 73 |
1 files changed, 52 insertions, 21 deletions
diff --git a/apps/playlist_viewer.c b/apps/playlist_viewer.c index 05b39b4a4e..54451992a7 100644 --- a/apps/playlist_viewer.c +++ b/apps/playlist_viewer.c | |||
@@ -326,7 +326,7 @@ static bool playlist_viewer_init(struct playlist_viewer * viewer, | |||
326 | if (!have_list) | 326 | if (!have_list) |
327 | { | 327 | { |
328 | /* Nothing to view, exit */ | 328 | /* Nothing to view, exit */ |
329 | splash(HZ, str(LANG_CATALOG_NO_PLAYLISTS)); | 329 | splash(HZ, ID2P(LANG_CATALOG_NO_PLAYLISTS)); |
330 | return false; | 330 | return false; |
331 | } | 331 | } |
332 | 332 | ||
@@ -638,27 +638,28 @@ static enum themable_icons playlist_callback_icons(int selected_item, | |||
638 | static int playlist_callback_voice(int selected_item, void *data) | 638 | static int playlist_callback_voice(int selected_item, void *data) |
639 | { | 639 | { |
640 | struct playlist_viewer *local_viewer = (struct playlist_viewer *)data; | 640 | struct playlist_viewer *local_viewer = (struct playlist_viewer *)data; |
641 | 641 | struct playlist_entry *track= | |
642 | int track_num = get_track_num(local_viewer, selected_item); | 642 | playlist_buffer_get_track(&(local_viewer->buffer), |
643 | struct playlist_entry *track = | 643 | selected_item); |
644 | playlist_buffer_get_track(&(local_viewer->buffer), track_num); | 644 | (void)selected_item; |
645 | 645 | if(global_settings.playlist_viewer_icons) { | |
646 | bool enqueue = false; | 646 | if (track->index == local_viewer->current_playing_track) |
647 | 647 | talk_id(LANG_NOW_PLAYING, true); | |
648 | if (global_settings.talk_file_clip || global_settings.talk_file == 2) | 648 | if (track->index == local_viewer->moving_track) |
649 | { | 649 | talk_id(VOICE_TRACK_TO_MOVE, true); |
650 | if (global_settings.playlist_viewer_indices) | 650 | if (track->queued) |
651 | { | 651 | talk_id(VOICE_QUEUED, true); |
652 | talk_number(track->display_index, false); | ||
653 | enqueue = true; | ||
654 | } | ||
655 | talk_file_or_spell(NULL, track->name, NULL, enqueue); | ||
656 | } | 652 | } |
657 | else if (global_settings.talk_file == 1) /* as numbers */ | 653 | if (track->skipped) |
658 | { | 654 | talk_id(VOICE_BAD_TRACK, true); |
659 | talk_id(VOICE_FILE, false); | 655 | if (global_settings.playlist_viewer_indices) |
660 | talk_number(track->display_index, true); | 656 | talk_number(track->display_index, true); |
661 | } | 657 | |
658 | if(global_settings.playlist_viewer_track_display) | ||
659 | talk_fullpath(track->name, true); | ||
660 | else talk_file_or_spell(NULL, track->name, NULL, true); | ||
661 | if (viewer.moving_track != -1) | ||
662 | talk_ids(true,VOICE_PAUSE, VOICE_MOVING_TRACK); | ||
662 | 663 | ||
663 | return 0; | 664 | return 0; |
664 | } | 665 | } |
@@ -678,7 +679,9 @@ enum playlist_viewer_result playlist_viewer_ex(const char* filename) | |||
678 | push_current_activity(ACTIVITY_PLAYLISTVIEWER); | 679 | push_current_activity(ACTIVITY_PLAYLISTVIEWER); |
679 | gui_synclist_init(&playlist_lists, playlist_callback_name, | 680 | gui_synclist_init(&playlist_lists, playlist_callback_name, |
680 | &viewer, false, 1, NULL); | 681 | &viewer, false, 1, NULL); |
681 | gui_synclist_set_voice_callback(&playlist_lists, playlist_callback_voice); | 682 | gui_synclist_set_voice_callback(&playlist_lists, |
683 | global_settings.talk_file? | ||
684 | &playlist_callback_voice:NULL); | ||
682 | gui_synclist_set_icon_callback(&playlist_lists, | 685 | gui_synclist_set_icon_callback(&playlist_lists, |
683 | global_settings.playlist_viewer_icons? | 686 | global_settings.playlist_viewer_icons? |
684 | &playlist_callback_icons:NULL); | 687 | &playlist_callback_icons:NULL); |
@@ -708,6 +711,7 @@ enum playlist_viewer_result playlist_viewer_ex(const char* filename) | |||
708 | gui_synclist_set_nb_items(&playlist_lists, viewer.num_tracks); | 711 | gui_synclist_set_nb_items(&playlist_lists, viewer.num_tracks); |
709 | 712 | ||
710 | gui_synclist_draw(&playlist_lists); | 713 | gui_synclist_draw(&playlist_lists); |
714 | gui_synclist_speak_item(&playlist_lists); | ||
711 | } | 715 | } |
712 | 716 | ||
713 | /* Timeout so we can determine if play status has changed */ | 717 | /* Timeout so we can determine if play status has changed */ |
@@ -740,6 +744,7 @@ enum playlist_viewer_result playlist_viewer_ex(const char* filename) | |||
740 | viewer.moving_track = -1; | 744 | viewer.moving_track = -1; |
741 | viewer.moving_playlist_index = -1; | 745 | viewer.moving_playlist_index = -1; |
742 | gui_synclist_draw(&playlist_lists); | 746 | gui_synclist_draw(&playlist_lists); |
747 | gui_synclist_speak_item(&playlist_lists); | ||
743 | } | 748 | } |
744 | else | 749 | else |
745 | { | 750 | { |
@@ -763,8 +768,11 @@ enum playlist_viewer_result playlist_viewer_ex(const char* filename) | |||
763 | viewer.moving_playlist_index, | 768 | viewer.moving_playlist_index, |
764 | current_track->index); | 769 | current_track->index); |
765 | if (ret_val < 0) | 770 | if (ret_val < 0) |
771 | { | ||
772 | cond_talk_ids_fq(LANG_MOVE, LANG_FAILED); | ||
766 | splashf(HZ, (unsigned char *)"%s %s", str(LANG_MOVE), | 773 | splashf(HZ, (unsigned char *)"%s %s", str(LANG_MOVE), |
767 | str(LANG_FAILED)); | 774 | str(LANG_FAILED)); |
775 | } | ||
768 | update_playlist(true); | 776 | update_playlist(true); |
769 | viewer.moving_track = -1; | 777 | viewer.moving_track = -1; |
770 | viewer.moving_playlist_index = -1; | 778 | viewer.moving_playlist_index = -1; |
@@ -800,6 +808,7 @@ enum playlist_viewer_result playlist_viewer_ex(const char* filename) | |||
800 | exit = true; | 808 | exit = true; |
801 | } | 809 | } |
802 | gui_synclist_draw(&playlist_lists); | 810 | gui_synclist_draw(&playlist_lists); |
811 | gui_synclist_speak_item(&playlist_lists); | ||
803 | 812 | ||
804 | break; | 813 | break; |
805 | } | 814 | } |
@@ -833,6 +842,7 @@ enum playlist_viewer_result playlist_viewer_ex(const char* filename) | |||
833 | global_settings.playlist_viewer_icons? | 842 | global_settings.playlist_viewer_icons? |
834 | &playlist_callback_icons:NULL); | 843 | &playlist_callback_icons:NULL); |
835 | gui_synclist_draw(&playlist_lists); | 844 | gui_synclist_draw(&playlist_lists); |
845 | gui_synclist_speak_item(&playlist_lists); | ||
836 | break; | 846 | break; |
837 | } | 847 | } |
838 | case ACTION_STD_MENU: | 848 | case ACTION_STD_MENU: |
@@ -849,6 +859,7 @@ enum playlist_viewer_result playlist_viewer_ex(const char* filename) | |||
849 | } | 859 | } |
850 | 860 | ||
851 | exit: | 861 | exit: |
862 | talk_shutup(); | ||
852 | pop_current_activity(); | 863 | pop_current_activity(); |
853 | if (viewer.playlist) | 864 | if (viewer.playlist) |
854 | { | 865 | { |
@@ -870,6 +881,17 @@ static const char* playlist_search_callback_name(int selected_item, void * data, | |||
870 | return buffer; | 881 | return buffer; |
871 | } | 882 | } |
872 | 883 | ||
884 | static int say_search_item(int selected_item, void *data) | ||
885 | { | ||
886 | int *found_indicies = (int*)data; | ||
887 | static struct playlist_track_info track; | ||
888 | playlist_get_track_info(viewer.playlist,found_indicies[selected_item],&track); | ||
889 | if(global_settings.playlist_viewer_track_display) | ||
890 | talk_fullpath(track.filename, false); | ||
891 | else talk_file_or_spell(NULL, track.filename, NULL, false); | ||
892 | return 0; | ||
893 | } | ||
894 | |||
873 | bool search_playlist(void) | 895 | bool search_playlist(void) |
874 | { | 896 | { |
875 | char search_str[32] = ""; | 897 | char search_str[32] = ""; |
@@ -887,6 +909,7 @@ bool search_playlist(void) | |||
887 | return ret; | 909 | return ret; |
888 | lcd_clear_display(); | 910 | lcd_clear_display(); |
889 | playlist_count = playlist_amount_ex(viewer.playlist); | 911 | playlist_count = playlist_amount_ex(viewer.playlist); |
912 | cond_talk_ids_fq(LANG_WAIT); | ||
890 | 913 | ||
891 | cpu_boost(true); | 914 | cpu_boost(true); |
892 | 915 | ||
@@ -913,6 +936,8 @@ bool search_playlist(void) | |||
913 | 936 | ||
914 | cpu_boost(false); | 937 | cpu_boost(false); |
915 | 938 | ||
939 | cond_talk_ids_fq(TALK_ID(found_indicies_count, UNIT_INT), | ||
940 | LANG_PLAYLIST_SEARCH_MSG); | ||
916 | if (!found_indicies_count) | 941 | if (!found_indicies_count) |
917 | { | 942 | { |
918 | return ret; | 943 | return ret; |
@@ -923,9 +948,14 @@ bool search_playlist(void) | |||
923 | found_indicies, false, 1, NULL); | 948 | found_indicies, false, 1, NULL); |
924 | gui_synclist_set_title(&playlist_lists, str(LANG_SEARCH_RESULTS), NOICON); | 949 | gui_synclist_set_title(&playlist_lists, str(LANG_SEARCH_RESULTS), NOICON); |
925 | gui_synclist_set_icon_callback(&playlist_lists, NULL); | 950 | gui_synclist_set_icon_callback(&playlist_lists, NULL); |
951 | if(global_settings.talk_file) | ||
952 | gui_synclist_set_voice_callback(&playlist_lists, | ||
953 | global_settings.talk_file? | ||
954 | &say_search_item:NULL); | ||
926 | gui_synclist_set_nb_items(&playlist_lists, found_indicies_count); | 955 | gui_synclist_set_nb_items(&playlist_lists, found_indicies_count); |
927 | gui_synclist_select_item(&playlist_lists, 0); | 956 | gui_synclist_select_item(&playlist_lists, 0); |
928 | gui_synclist_draw(&playlist_lists); | 957 | gui_synclist_draw(&playlist_lists); |
958 | gui_synclist_speak_item(&playlist_lists); | ||
929 | while (!exit) | 959 | while (!exit) |
930 | { | 960 | { |
931 | if (list_do_action(CONTEXT_LIST, HZ/4, | 961 | if (list_do_action(CONTEXT_LIST, HZ/4, |
@@ -954,5 +984,6 @@ bool search_playlist(void) | |||
954 | break; | 984 | break; |
955 | } | 985 | } |
956 | } | 986 | } |
987 | talk_shutup(); | ||
957 | return ret; | 988 | return ret; |
958 | } | 989 | } |