subbrute_scene_load_file.c 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. #include "../subbrute_i.h"
  2. #include "../subbrute_custom_event.h"
  3. #include <lib/subghz/protocols/registry.h>
  4. #define TAG "SubBruteSceneLoadFile"
  5. //void subbrute_scene_load_file_callback(SubBruteCustomEvent event, void* context) {
  6. //// furi_assert(context);
  7. ////
  8. //// SubBruteState* instance = (SubBruteState*)context;
  9. //// view_dispatcher_send_custom_event(instance->view_dispatcher, event);
  10. //}
  11. void subbrute_scene_load_file_on_enter(void* context) {
  12. furi_assert(context);
  13. SubBruteState* instance = (SubBruteState*)context;
  14. // Input events and views are managed by file_browser
  15. string_t app_folder;
  16. string_t load_path;
  17. string_init(load_path);
  18. string_init_set_str(app_folder, SUBBRUTE_PATH);
  19. DialogsFileBrowserOptions browser_options;
  20. dialog_file_browser_set_basic_options(&browser_options, SUBBRUTE_FILE_EXT, &I_sub1_10px);
  21. SubBruteFileResult load_result = SubBruteFileResultUnknown;
  22. bool res =
  23. dialog_file_browser_show(instance->dialogs, load_path, app_folder, &browser_options);
  24. #ifdef FURI_DEBUG
  25. FURI_LOG_D(
  26. TAG,
  27. "load_path: %s, app_folder: %s",
  28. string_get_cstr(load_path),
  29. string_get_cstr(app_folder));
  30. #endif
  31. if(res) {
  32. load_result = subbrute_device_load_from_file(instance->device, load_path);
  33. if(load_result == SubBruteFileResultOk) {
  34. load_result = subbrute_device_attack_set(instance->device, SubBruteAttackLoadFile);
  35. if(load_result == SubBruteFileResultOk) {
  36. // Ready to run!
  37. instance->device->state = SubBruteDeviceStateReady;
  38. FURI_LOG_I(TAG, "Ready to run");
  39. res = true;
  40. }
  41. }
  42. if(load_result == SubBruteFileResultOk) {
  43. scene_manager_next_scene(instance->scene_manager, SubBruteSceneLoadSelect);
  44. } else {
  45. FURI_LOG_E(TAG, "Returned error: %d", load_result);
  46. string_t dialog_msg;
  47. string_init(dialog_msg);
  48. string_cat_printf(
  49. dialog_msg, "Cannot parse\nfile: %s", subbrute_device_error_get_desc(load_result));
  50. dialog_message_show_storage_error(instance->dialogs, string_get_cstr(dialog_msg));
  51. string_clear(dialog_msg);
  52. scene_manager_search_and_switch_to_previous_scene(
  53. instance->scene_manager, SubBruteSceneStart);
  54. }
  55. } else {
  56. scene_manager_search_and_switch_to_previous_scene(
  57. instance->scene_manager, SubBruteSceneStart);
  58. }
  59. string_clear(app_folder);
  60. string_clear(load_path);
  61. }
  62. void subbrute_scene_load_file_on_exit(void* context) {
  63. UNUSED(context);
  64. }
  65. bool subbrute_scene_load_file_on_event(void* context, SceneManagerEvent event) {
  66. UNUSED(context);
  67. UNUSED(event);
  68. return false;
  69. }