scene_file_browser.c 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #include "../subghz_playlist_creator.h"
  2. #include "scene_file_browser.h"
  3. #include "scene_menu.h"
  4. #include "scene_text_input.h"
  5. #include <furi.h>
  6. #include <gui/view_dispatcher.h>
  7. // Remove global statics
  8. typedef struct {
  9. SceneFileBrowserSelectCallback on_select;
  10. } SceneFileBrowserContext;
  11. static void file_browser_scene_callback(void* context) {
  12. SubGhzPlaylistCreator* app = context;
  13. if(furi_string_size(app->file_browser_result) > 0 && app->file_browser_select_cb) {
  14. app->file_browser_select_cb(app, furi_string_get_cstr(app->file_browser_result));
  15. app->file_browser_select_cb = NULL;
  16. } else {
  17. if(app->return_scene == ReturnScene_PlaylistEdit) {
  18. scene_playlist_edit_show(app);
  19. } else if(app->return_scene == ReturnScene_Menu) {
  20. scene_menu_show(app);
  21. } else if(app->return_scene == ReturnScene_TextInput) {
  22. scene_text_input_show(app);
  23. } else {
  24. scene_menu_show(app);
  25. }
  26. }
  27. }
  28. void scene_file_browser_select(
  29. SubGhzPlaylistCreator* app,
  30. const char* start_dir,
  31. const char* extension,
  32. SceneFileBrowserSelectCallback on_select
  33. ) {
  34. app->file_browser_select_cb = on_select;
  35. furi_string_set(app->file_browser_result, start_dir);
  36. file_browser_configure(
  37. app->file_browser,
  38. extension,
  39. start_dir,
  40. false, // skip_assets
  41. true, // hide_dot_files
  42. NULL, // file_icon
  43. false // hide_ext
  44. );
  45. file_browser_set_callback(app->file_browser, file_browser_scene_callback, app);
  46. file_browser_start(app->file_browser, app->file_browser_result);
  47. app->current_view = SubGhzPlaylistCreatorViewFileBrowser;
  48. view_dispatcher_switch_to_view(app->view_dispatcher, SubGhzPlaylistCreatorViewFileBrowser);
  49. }
  50. void scene_file_browser_show(SubGhzPlaylistCreator* app) {
  51. view_dispatcher_switch_to_view(app->view_dispatcher, SubGhzPlaylistCreatorViewFileBrowser);
  52. }
  53. // Add the definition for scene_file_browser_init_view
  54. void scene_file_browser_init_view(SubGhzPlaylistCreator* app) {
  55. // The view is allocated in subghz_playlist_creator_alloc and added to the dispatcher there.
  56. // This function can remain empty for now.
  57. UNUSED(app);
  58. }