subghz_scene_save_name.c 3.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. #include "../subghz_i.h"
  2. #include <lib/toolbox/random_name.h>
  3. #include "../helpers/subghz_custom_event.h"
  4. #include <lib/subghz/protocols/subghz_protocol_raw.h>
  5. #include <gui/modules/validators.h>
  6. void subghz_scene_save_name_text_input_callback(void* context) {
  7. furi_assert(context);
  8. SubGhz* subghz = context;
  9. view_dispatcher_send_custom_event(subghz->view_dispatcher, SubghzCustomEventSceneSaveName);
  10. }
  11. void subghz_scene_save_name_on_enter(void* context) {
  12. SubGhz* subghz = context;
  13. // Setup view
  14. TextInput* text_input = subghz->text_input;
  15. bool dev_name_empty = false;
  16. if(!strcmp(subghz->file_name, "")) {
  17. set_random_name(subghz->file_name, sizeof(subghz->file_name));
  18. //highlighting the entire filename by default
  19. dev_name_empty = true;
  20. } else {
  21. strcpy(subghz->file_name_tmp, subghz->file_name);
  22. if(scene_manager_get_scene_state(subghz->scene_manager, SubGhzSceneReadRAW) ==
  23. SubghzCustomEventManagerSet) {
  24. subghz_get_next_name_file(subghz);
  25. }
  26. }
  27. text_input_set_header_text(text_input, "Name signal");
  28. text_input_set_result_callback(
  29. text_input,
  30. subghz_scene_save_name_text_input_callback,
  31. subghz,
  32. subghz->file_name,
  33. 22, //Max len name
  34. dev_name_empty);
  35. ValidatorIsFile* validator_is_file =
  36. validator_is_file_alloc_init(SUBGHZ_APP_PATH_FOLDER, SUBGHZ_APP_EXTENSION);
  37. text_input_set_validator(text_input, validator_is_file_callback, validator_is_file);
  38. view_dispatcher_switch_to_view(subghz->view_dispatcher, SubGhzViewTextInput);
  39. }
  40. bool subghz_scene_save_name_on_event(void* context, SceneManagerEvent event) {
  41. SubGhz* subghz = context;
  42. if(event.type == SceneManagerEventTypeBack) {
  43. strcpy(subghz->file_name, subghz->file_name_tmp);
  44. scene_manager_previous_scene(subghz->scene_manager);
  45. return true;
  46. } else if(event.type == SceneManagerEventTypeCustom) {
  47. if(event.event == SubghzCustomEventSceneSaveName) {
  48. if(strcmp(subghz->file_name, "")) {
  49. if(strcmp(subghz->file_name_tmp, "")) {
  50. if(!subghz_rename_file(subghz)) {
  51. return false;
  52. }
  53. } else {
  54. subghz_save_protocol_to_file(subghz, subghz->file_name);
  55. }
  56. if(scene_manager_get_scene_state(subghz->scene_manager, SubGhzSceneReadRAW) ==
  57. SubghzCustomEventManagerSet) {
  58. subghz_protocol_raw_set_last_file_name(
  59. (SubGhzProtocolRAW*)subghz->txrx->protocol_result, subghz->file_name);
  60. scene_manager_set_scene_state(
  61. subghz->scene_manager, SubGhzSceneReadRAW, SubghzCustomEventManagerNoSet);
  62. } else {
  63. subghz_file_name_clear(subghz);
  64. }
  65. scene_manager_next_scene(subghz->scene_manager, SubGhzSceneSaveSuccess);
  66. return true;
  67. } else {
  68. string_set(subghz->error_str, "No name file");
  69. scene_manager_next_scene(subghz->scene_manager, SubGhzSceneShowErrorSub);
  70. return true;
  71. }
  72. }
  73. }
  74. return false;
  75. }
  76. void subghz_scene_save_name_on_exit(void* context) {
  77. SubGhz* subghz = context;
  78. // Clear validator
  79. void* validator_context = text_input_get_validator_callback_context(subghz->text_input);
  80. text_input_set_validator(subghz->text_input, NULL, NULL);
  81. validator_is_file_free(validator_context);
  82. // Clear view
  83. text_input_reset(subghz->text_input);
  84. }