archive_scene_rename.c 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. #include "../archive_i.h"
  2. #include "../helpers/archive_favorites.h"
  3. #include "../helpers/archive_files.h"
  4. #include "../helpers/archive_browser.h"
  5. #define SCENE_RENAME_CUSTOM_EVENT (0UL)
  6. #define MAX_TEXT_INPUT_LEN 22
  7. void archive_scene_rename_text_input_callback(void* context) {
  8. ArchiveApp* archive = (ArchiveApp*)context;
  9. view_dispatcher_send_custom_event(archive->view_dispatcher, SCENE_RENAME_CUSTOM_EVENT);
  10. }
  11. void archive_scene_rename_on_enter(void* context) {
  12. ArchiveApp* archive = (ArchiveApp*)context;
  13. TextInput* text_input = archive->text_input;
  14. ArchiveFile_t* current = archive_get_current_file(archive->browser);
  15. strlcpy(archive->text_store, string_get_cstr(current->name), MAX_NAME_LEN);
  16. archive_trim_file_path(archive->text_store, true);
  17. text_input_set_header_text(text_input, "Rename:");
  18. text_input_set_result_callback(
  19. text_input,
  20. archive_scene_rename_text_input_callback,
  21. archive,
  22. archive->text_store,
  23. MAX_TEXT_INPUT_LEN,
  24. false);
  25. view_dispatcher_switch_to_view(archive->view_dispatcher, ArchiveViewTextInput);
  26. }
  27. bool archive_scene_rename_on_event(void* context, SceneManagerEvent event) {
  28. ArchiveApp* archive = (ArchiveApp*)context;
  29. bool consumed = false;
  30. if(event.type == SceneManagerEventTypeCustom) {
  31. if(event.event == SCENE_RENAME_CUSTOM_EVENT) {
  32. Storage* fs_api = furi_record_open("storage");
  33. string_t buffer_src;
  34. string_t buffer_dst;
  35. const char* path = archive_get_path(archive->browser);
  36. const char* name = archive_get_name(archive->browser);
  37. string_init_printf(buffer_src, "%s/%s", path, name);
  38. string_init_printf(buffer_dst, "%s/%s", path, archive->text_store);
  39. // append extension
  40. ArchiveFile_t* file = archive_get_current_file(archive->browser);
  41. string_cat(buffer_dst, known_ext[file->type]);
  42. storage_common_rename(
  43. fs_api, string_get_cstr(buffer_src), string_get_cstr(buffer_dst));
  44. furi_record_close("storage");
  45. if(file->fav) {
  46. archive_favorites_rename(path, name, string_get_cstr(buffer_dst));
  47. }
  48. string_clear(buffer_src);
  49. string_clear(buffer_dst);
  50. scene_manager_next_scene(archive->scene_manager, ArchiveAppSceneBrowser);
  51. consumed = true;
  52. }
  53. }
  54. return consumed;
  55. }
  56. void archive_scene_rename_on_exit(void* context) {
  57. ArchiveApp* archive = (ArchiveApp*)context;
  58. // Clear view
  59. text_input_clean(archive->text_input);
  60. }