scene_ir_browse.c (2103B)
1 #include "../helpers/ir_helper.h" 2 #include "../timed_remote.h" 3 #include "timed_remote_scene.h" 4 5 #define IR_DIR_PATH "/ext/infrared" 6 7 static FuriString **file_list = NULL; 8 static size_t file_count = 0; 9 10 static void ir_browse_callback(void *context, uint32_t index) { 11 TimedRemoteApp *app = context; 12 if (index < file_count) { 13 /* Store selected file path */ 14 snprintf(app->selected_file_path, sizeof(app->selected_file_path), "%s/%s", 15 IR_DIR_PATH, furi_string_get_cstr(file_list[index])); 16 view_dispatcher_send_custom_event(app->view_dispatcher, 17 TimedRemoteEventFileSelected); 18 } 19 } 20 21 void timed_remote_scene_ir_browse_on_enter(void *context) { 22 TimedRemoteApp *app = context; 23 24 submenu_reset(app->submenu); 25 submenu_set_header(app->submenu, "Select IR File"); 26 27 /* Get list of .ir files */ 28 if (ir_helper_list_files(IR_DIR_PATH, &file_list, &file_count)) { 29 if (file_count == 0) { 30 submenu_add_item(app->submenu, "(No IR files found)", 0, NULL, NULL); 31 } else { 32 for (size_t i = 0; i < file_count; i++) { 33 submenu_add_item(app->submenu, furi_string_get_cstr(file_list[i]), i, 34 ir_browse_callback, app); 35 } 36 } 37 } else { 38 submenu_add_item(app->submenu, "(Error reading directory)", 0, NULL, NULL); 39 } 40 41 view_dispatcher_switch_to_view(app->view_dispatcher, TimedRemoteViewSubmenu); 42 } 43 44 bool timed_remote_scene_ir_browse_on_event(void *context, 45 SceneManagerEvent event) { 46 TimedRemoteApp *app = context; 47 bool consumed = false; 48 49 if (event.type == SceneManagerEventTypeCustom) { 50 if (event.event == TimedRemoteEventFileSelected) { 51 scene_manager_next_scene(app->scene_manager, TimedRemoteSceneIrSelect); 52 consumed = true; 53 } 54 } 55 56 return consumed; 57 } 58 59 void timed_remote_scene_ir_browse_on_exit(void *context) { 60 TimedRemoteApp *app = context; 61 submenu_reset(app->submenu); 62 63 /* Free file list */ 64 if (file_list) { 65 ir_helper_free_file_list(file_list, file_count); 66 file_list = NULL; 67 file_count = 0; 68 } 69 }