summaryrefslogtreecommitdiff
path: root/apps/playlist_viewer.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/playlist_viewer.c')
-rw-r--r--apps/playlist_viewer.c73
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,
638static int playlist_callback_voice(int selected_item, void *data) 638static 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
851exit: 861exit:
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
884static 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
873bool search_playlist(void) 895bool 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}