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.c110
1 files changed, 110 insertions, 0 deletions
diff --git a/apps/playlist_viewer.c b/apps/playlist_viewer.c
index ddc238cb27..422c0047ff 100644
--- a/apps/playlist_viewer.c
+++ b/apps/playlist_viewer.c
@@ -804,3 +804,113 @@ exit:
804 playlist_close(viewer.playlist); 804 playlist_close(viewer.playlist);
805 return ret; 805 return ret;
806} 806}
807char * playlist_search_callback_name(int selected_item, void * data, char *buffer)
808{
809 int *found_indicies = (int*)data;
810 static struct playlist_track_info track;
811 playlist_get_track_info(viewer.playlist,found_indicies[selected_item],&track);
812 format_name(buffer,track.filename);
813 return(buffer);
814}
815
816
817void playlist_search_callback_icons(int selected_item, void * data, ICON * icon)
818{
819 (void)selected_item;
820 (void)data;
821#ifdef HAVE_LCD_BITMAP
822 *icon=0;
823#else
824 *icon=-1;
825#endif
826}
827bool search_playlist(void)
828{
829 char search_str[32] = "";
830 bool ret = false, exit = false;
831 int i, playlist_count;
832 int found_indicies[MAX_PLAYLIST_ENTRIES],found_indicies_count = 0;
833 int button;
834 struct gui_synclist playlist_lists;
835 struct playlist_track_info track;
836
837 if (!playlist_viewer_init(&viewer, 0, false))
838 return ret;
839 if (kbd_input(search_str,sizeof(search_str)) == -1)
840 return ret;
841 lcd_clear_display();
842 playlist_count = playlist_amount_ex(viewer.playlist);
843 for (i=0;(i<playlist_count)&&(found_indicies_count<MAX_PLAYLIST_ENTRIES);i++)
844 {
845 gui_syncsplash(0, true, str(LANG_PLAYLIST_SEARCH_MSG),found_indicies_count,
846#if CONFIG_KEYPAD == PLAYER_PAD
847 str(LANG_STOP_ABORT)
848#else
849 str(LANG_OFF_ABORT)
850#endif
851 );
852 if (SETTINGS_CANCEL == button_get(false))
853 return ret;
854 playlist_get_track_info(viewer.playlist,i,&track);
855 if (strcasestr(track.filename,search_str))
856 {
857 found_indicies[found_indicies_count++] = track.index;
858 }
859 }
860 if (!found_indicies_count)
861 {
862 return ret;
863 }
864 backlight_on();
865 gui_synclist_init(&playlist_lists, playlist_search_callback_name,
866 found_indicies);
867 gui_synclist_set_icon_callback(&playlist_lists,
868 global_settings.playlist_viewer_icons?
869 &playlist_search_callback_icons:NULL);
870 gui_synclist_set_nb_items(&playlist_lists, found_indicies_count);
871 gui_synclist_select_item(&playlist_lists, 0);
872 gui_synclist_draw(&playlist_lists);
873 while (!exit)
874 {
875 button = button_get(true);
876 if (gui_synclist_do_button(&playlist_lists, button))
877 continue;
878 switch (button)
879 {
880 case TREE_EXIT:
881#ifdef TREE_RC_EXIT
882 case TREE_RC_EXIT:
883#endif
884#ifdef TREE_OFF
885 case TREE_OFF:
886#endif
887 exit = true;
888 break;
889
890#ifdef TREE_ENTER
891 case TREE_ENTER:
892 case TREE_ENTER | BUTTON_REPEAT:
893#endif
894#ifdef TREE_RC_RUN
895 case TREE_RC_RUN:
896#endif
897 case TREE_RUN:
898 playlist_start(
899 found_indicies[gui_synclist_get_sel_pos(&playlist_lists)]
900 ,0);
901 exit = 1;
902 break;
903 case BUTTON_NONE:
904 break;
905 default:
906 if(default_event_handler(button) == SYS_USB_CONNECTED)
907 {
908 ret = true;
909 exit = true;
910 }
911 break;
912 }
913 }
914 return ret;
915}
916