lfrfid_app_scene_save_name.cpp 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. #include "lfrfid_app_scene_save_name.h"
  2. #include "m-string.h"
  3. #include <lib/toolbox/random_name.h>
  4. #include <lib/toolbox/path.h>
  5. void LfRfidAppSceneSaveName::on_enter(LfRfidApp* app, bool /* need_restore */) {
  6. const char* key_name = app->worker.key.get_name();
  7. bool key_name_empty = !strcmp(key_name, "");
  8. if(key_name_empty) {
  9. string_set_str(app->file_path, app->app_folder);
  10. set_random_name(app->text_store.text, app->text_store.text_size);
  11. } else {
  12. app->text_store.set("%s", key_name);
  13. }
  14. auto text_input = app->view_controller.get<TextInputVM>();
  15. text_input->set_header_text("Name the card");
  16. text_input->set_result_callback(
  17. save_callback,
  18. app,
  19. app->text_store.text,
  20. app->worker.key.get_name_length(),
  21. key_name_empty);
  22. string_t folder_path;
  23. string_init(folder_path);
  24. path_extract_dirname(string_get_cstr(app->file_path), folder_path);
  25. ValidatorIsFile* validator_is_file =
  26. validator_is_file_alloc_init(string_get_cstr(folder_path), app->app_extension, key_name);
  27. text_input->set_validator(validator_is_file_callback, validator_is_file);
  28. string_clear(folder_path);
  29. app->view_controller.switch_to<TextInputVM>();
  30. }
  31. bool LfRfidAppSceneSaveName::on_event(LfRfidApp* app, LfRfidApp::Event* event) {
  32. bool consumed = false;
  33. if(event->type == LfRfidApp::EventType::Next) {
  34. if(strlen(app->worker.key.get_name())) {
  35. app->delete_key(&app->worker.key);
  36. }
  37. app->worker.key.set_name(app->text_store.text);
  38. if(app->save_key(&app->worker.key)) {
  39. app->scene_controller.switch_to_next_scene(LfRfidApp::SceneType::SaveSuccess);
  40. } else {
  41. app->scene_controller.search_and_switch_to_previous_scene(
  42. {LfRfidApp::SceneType::ReadKeyMenu});
  43. }
  44. }
  45. return consumed;
  46. }
  47. void LfRfidAppSceneSaveName::on_exit(LfRfidApp* app) {
  48. void* validator_context =
  49. app->view_controller.get<TextInputVM>()->get_validator_callback_context();
  50. app->view_controller.get<TextInputVM>()->set_validator(NULL, NULL);
  51. validator_is_file_free((ValidatorIsFile*)validator_context);
  52. app->view_controller.get<TextInputVM>()->clean();
  53. }
  54. void LfRfidAppSceneSaveName::save_callback(void* context) {
  55. LfRfidApp* app = static_cast<LfRfidApp*>(context);
  56. LfRfidApp::Event event;
  57. event.type = LfRfidApp::EventType::Next;
  58. app->view_controller.send_event(&event);
  59. }